android 开发中我们会经常用到dialog提示框,有时候会有在屏幕底部显示dialog,但是官方并没有底部显示的dialog,这时候就需要我们自己动手自定义一个底部dialog。
不多说,直接上代码
先定义一个BottomDialog类,继承与Dialog
public class BottomDialog extends Dialog implements View.OnClickListener{
private int layoutId;//要显示的布局文件id
private Context context;
private int[] listenedItems;//layout中要监听的控件id
private OnBottomMenuItemClickListener listener;
public BottomDialog( Context context, int layoutId, int[] listenedItems) {
super(context, R.style.dialog_custom);
this.context = context ;
this.layoutId = layoutId;
this.listenedItems = listenedItems;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutId);//设置显示给定的布局文件
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM;//设置底部显示
WindowManager windowManager = ((Activity) context).getWindowManager(); // 宽度全屏
//Display display = windowManager.getDefaultDisplay();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;//设置dialog宽度全屏
// lp.width = display.getWidth()*9/10;//设置为屏幕的9/10宽
lp.alpha = 1.0f; //设置本身透明度
lp.dimAmount = 0.5f; //设置黑暗度
this.setCanceledOnTouchOutside(true);//设置点击屏幕外取消
//给控件添加监听事件
for (int viewId : listenedItems) {
findViewById(viewId).setOnClickListener(this);
}
}
/**
* 获取布局中的控件
* @param viewId
* @param <T>
* @return
*/
public <T extends View > T getView(int viewId){
View view = findViewById(viewId);
return (T) view;
}
@Override
public void onClick(View v) {
dismiss();
listener.onBottomMenuItemClick(this,v);
}
//设置事件监听的接口
public interface OnBottomMenuItemClickListener {
void onBottomMenuItemClick(BottomDialog dialog, View view);
}
public void setOnBottomMenuItemClickListener(OnBottomMenuItemClickListener listener) {
this.listener = listener;
}
}
其中R.style.dialog_custom 为自己定义的样式
<!-- dialog样式 -->
<style name="dialog_custom" parent="@android:style/Theme.Dialog">
<item name="android:windowIsFloating">true</item> <!--是否浮在界面上-->
<item name="android:windowIsTranslucent">false</item> <!--是否半透明-->
<item name="android:windowNoTitle">false</item> <!--是否有标题-->
<item name="android:windowBackground">@android:color/transparent</item> <!--窗口背景色透明-->
<item name="android:backgroundDimEnabled">true</item> <!--背景是否模糊显示-->
</style>
然后再在activity中调用
final int[] views = new int[2];
views[0] = R.id.input_dialog_sure;
views[1] = R.id.input_dialog_cancel;
BottomDialog dialog = new BottomDialog(MainActivity.this,R.layout.input_dialog,views);
dialog.setOnBottomMenuItemClickListener(new BottomDialog.OnBottomMenuItemClickListener() {
@Override
public void onBottomMenuItemClick(BottomDialog dialog, View view) {
switch (view.getId()){
case R.id.input_dialog_sure:
EditText editText1 = dialog.getView(R.id.input_dialog_edit);
String content = editText1.getText().toString();
Toast.makeText(MainActivity.this,content,Toast.LENGTH_SHORT).show();
}
}
});
dialog.show();
我的布局文件input_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:background="@drawable/dialog_style"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:paddingTop="20dp"
android:id="@+id/input_dialog_title"
android:text="提示"
android:textSize="20sp"
android:textColor="#444444"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:paddingTop="20dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingBottom="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/input_dialog_edit"
android:layout_width="match_parent"
android:layout_height="40dp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#555555" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:textSize="18sp"
android:text="取消"
android:textColor="#444444"
android:gravity="center"
android:id="@+id/input_dialog_cancel"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp" />
<View
android:layout_width="1dp"
android:layout_height="60dp"
android:background="#555555" />
<TextView
android:textSize="18sp"
android:text="确定"
android:textColor="#444444"
android:gravity="center"
android:id="@+id/input_dialog_sure"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="60dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
效果图如下
参考博客:http://blog.youkuaiyun.com/DickyQie/article/details/75505059