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

更多相关文章

  1. android的adapter:ArrayAdapter,SimpleAdapter,SimpleCursorAdapte
  2. android 控件: xml 设置 Button 按下背景
  3. android编译分析之10—config.mk
  4. 使用WindowManager实现Android悬浮窗
  5. Android(安卓)Gallery 滑动停止监听方案
  6. android 自定义Toast,可设定显示时间
  7. android学习笔记(一) 遍历SD卡中所有文件并在listview中显示
  8. android 剪切图片 显示图片的一部分
  9. 安卓ScrollView嵌套RecyclerView,GridView,ViewPager冲突解决

随机推荐

  1. 疯狂android讲义---intent-filter
  2. Android踩坑日记:自定义水平和圆形Progres
  3. 【极客之作】快到极致的Android模拟器—
  4. Android中Recyclerview或ListView列表条
  5. Android(安卓)recycleview实现左右切换时
  6. Android(安卓)状态栏, 标题栏, 导航栏,系
  7. Android开机启动Service或Activity或应用
  8. Xamarin Mono For Android 4.6.07004看不
  9. Android常见Exception解决方法
  10. Android Native C development (1) -- En