android 打造可复用的底部dialog
16lz
2021-01-26
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 * @return */ public 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样式 -->
然后再在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.csdn.net/DickyQie/article/details/75505059
更多相关文章
- android的adapter:ArrayAdapter,SimpleAdapter,SimpleCursorAdapte
- android 控件: xml 设置 Button 按下背景
- android编译分析之10—config.mk
- 使用WindowManager实现Android悬浮窗
- Android(安卓)Gallery 滑动停止监听方案
- android 自定义Toast,可设定显示时间
- android学习笔记(一) 遍历SD卡中所有文件并在listview中显示
- android 剪切图片 显示图片的一部分
- 安卓ScrollView嵌套RecyclerView,GridView,ViewPager冲突解决