589 views

Android自定义对话框

很多时候写Android界面时要弹出对话框,Android自带的对话框有AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog等等,都可以用于简单的对话框显示,但很多时候这些简单功能并不能满足项目所需,下面以自定义AlertDialog对话框为例:

首先单独建立一个类CustomerDialog继承自AlertDialog

public class CustomerDialog extends AlertDialog {
    private Context context = null;

    public CustomerDialog(Context context) {
        super(context);
        this.context = context;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LayoutInflater inflater = LayoutInflater.from(context); 
        View customerLayout =  
            inflater.inflate(R.layout.customer_dialog, null); 
        setView(customerLayout);         
        super.onCreate(savedInstanceState);   
    }
}

再创建一个Activity

public class DIY_DialogActivity extends Activity {
    private final int CUSTOMER_DIALOG = 1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.button);
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog(CUSTOMER_DIALOG);
            }
        };
        button.setOnClickListener(listener);
    }
    @Override
    protected Dialog onCreateDialog(int id) {
        CustomerDialog dialog = null;
        switch (id) {
        case CUSTOMER_DIALOG:
            dialog = new CustomerDialog(DIY_DialogActivity.this);
            dialog.setTitle("自定义对话框");
            dialog.setIcon(R.drawable.icon);
            break;
        }
        return dialog;
    }
}

运行程序,效果如下:

还可以对自定义对话框位置

Window w=dialog.getWindow();
WindowManager.LayoutParams lp =w.getAttributes();
lp.x=20;
lp.y=100;

对话框的样式可在customer_dialog.xml中自己自定义,上面步骤便实现了AlertDialog对话框的自定义。

当还是有这些对话框不能满足应用需要的时候,这时候可以用第二种方法,就是使用Activity作为Dialog,这个功能肯定够强大了,可以通过设置Activity显示Dialog风格,使得该Activity在外观上和Dialog一致:显示在其它Activity前面且半透明。

只需在AndroidManifest.xml中如下定义Activity的Theme即可:

<activity android:name=".NewActivity"
android:theme="@android:style/Theme.Dialog">
</activity>

效果如下:

无觅相关文章插件,快速提升流量

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>