Android简单自定义Dialog样式

本文主要介绍一种简单的自定义Dialog样式的方法。

从实际开发的需求来说,当应用需要添加一些简单的信息的时候我们并不想单独再为这个功能开发一个独立的activity,大多数情况是使用对话框或者PopWindow的形式弹出浮窗供用户操作。

接下来介绍具体的实现过程,首先是自定义的一个布局文件用于替换Dialog窗体的主要内容

<?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="match_parent">
    <EditText
        android:id="@+id/edt_name"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="5dp"
        android:paddingLeft="5dp"
        android:gravity="center_vertical"
        android:hint="please input appname"
        android:textSize="16dp"
        />
    <EditText
        android:id="@+id/edt_count"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="5dp"
        android:paddingLeft="5dp"
        android:gravity="center_vertical"
        android:hint="please input appcount"
        android:textSize="16dp"
        />
    <EditText
        android:id="@+id/edt_password"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="5dp"
        android:paddingLeft="5dp"
        android:gravity="center_vertical"
        android:hint="please input apppassword"
        android:textSize="16dp"
        />

</LinearLayout>
在相应的activity中需要通过LayoutInflater来获取自定义布局文件的视图对象

//获取自定义Dialog view的视图以及组件的实例
        mInflater = LayoutInflater.from(this);
        layoutView = (LinearLayout) mInflater.inflate(R.layout.view_dialog, null);
        edtName = (EditText) layoutView.findViewById(R.id.edt_name);
        edtCount = (EditText) layoutView.findViewById(R.id.edt_count);
        edtPassword = (EditText) layoutView.findViewById(R.id.edt_password);
然后将获取到的layoutView设置给Dialog

if (alertDialog == null) {
                    alertDialog = new AlertDialog.Builder(MainActivity.this).
                            setView(layoutView).setTitle("Add new appinfo").setPositiveButton("Add", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            User user = userDao.getUserById(uid);
                            AppInfo appInfo = new AppInfo(edtName.getText().toString(),
                                    edtCount.getText().toString(), edtPassword.getText().toString(), user);
                            appInfoDao.add(appInfo);
                            myAdapter.addItem(appInfo);
                            myAdapter.refresh();
                        }
                    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    }).create();
                } else {
                    edtName.setText("");
                    edtCount.setText("");
                    edtPassword.setText("");
                    edtName.setHint("Please input appname");
                    edtCount.setHint("Please input appcount");
                    edtPassword.setHint("Please input apppassword");
                }
                alertDialog.show();
注意上面的代码中对alertDialog是否为空进行了判断,如果不判断的话每次都会创建新的Dialog,并给新的Dialog设置自定义的view,那么在Dialog dismiss之前或者当前的activity finish之前都必须手动去移除给Dialog设置的view,不然应用会报错。
因为只是为了实验和满足最原始的需求,并没有对UI样式优化,下图是最终实现的效果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值