Android学习之自定义AlertDialog

来源:互联网 发布:免费会计软件 编辑:程序博客网 时间:2024/05/17 22:17

今天写下自定义弹出对话框AlertDialog,自定义AlertDialog有很多种,也有很多实现的方式,系统自带的AlertDialog往往功能单一,主要是样式比较丑,对于处女座简直是不能忍啊,于是就想到了自定义样式的AlertDialog,以下是Demo:

先画布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/linearlayout_alert_dialog_text_view_custom"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@android:color/white"    android:orientation="vertical">    <TextView        android:id="@+id/textview_message_alert_dialog_text_view_custom"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center_horizontal|bottom"        android:paddingBottom="15dp"        android:paddingTop="15dp"        android:textColor="@android:color/black"        android:textSize="15dp"        android:textStyle="bold" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_marginBottom="15dp"        android:gravity="center_horizontal"        android:orientation="horizontal">        <Button            android:id="@+id/button_cancel_alert_dialog_text_view_custom"            android:layout_width="match_parent"            android:layout_height="40dp"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:background="@drawable/bg_alert_dialog_custom"            android:text="取消"            android:textColor="@android:color/holo_blue_light"            android:textSize="14dp"            android:textStyle="bold" />        <Button            android:id="@+id/button_ok_alert_dialog_text_view_custom"            android:layout_width="match_parent"            android:layout_height="40dp"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:background="@drawable/bg_alert_dialog_custom"            android:text="确定"            android:textColor="@android:color/holo_red_light"            android:textSize="14dp"            android:textStyle="bold" />    </LinearLayout></LinearLayout>
自定义Button的样式:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <corners android:radius="3dp" />    <stroke        android:width="1px"        android:color="#FF999999" />    <solid android:color="@android:color/white" /></shape>
最后是代码:

/** * 主界面 * * @author yuzhentao */public class MainActivity extends Activity {    private Context context;    private AlertDialog ad;    private Window window;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        context = this;        ad = new AlertDialog.Builder(context).create();        window = ad.getWindow();        findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                initAlertDialog();            }        });    }    /**     * 初始化AlertDialog     */    private void initAlertDialog() {        //获取屏幕分辨率宽度和高度        DisplayMetrics dm = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(dm);        int screenWidth = dm.widthPixels;        //初始化AlertDialog        ad.setCancelable(false);        ad.setCanceledOnTouchOutside(false);        ad.show();        //获取Window来设置AlertDialog的布局(宽为屏幕宽度乘以0.95,高为自适应)        window.setLayout((int) (screenWidth * 0.95F), LinearLayout.LayoutParams.WRAP_CONTENT);        window.setContentView(R.layout.alert_dialog_text_view_custom);        TextView tvMessage = (TextView) window.findViewById(R.id.textview_message_alert_dialog_text_view_custom);        Button btnCancel = (Button) window.findViewById(R.id.button_cancel_alert_dialog_text_view_custom);        Button btnOk = (Button) window.findViewById(R.id.button_ok_alert_dialog_text_view_custom);        tvMessage.setText("自定义弹出对话框");        btnCancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(context, "点击了取消", Toast.LENGTH_SHORT).show();                ad.dismiss();            }        });        btnOk.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(context, "点击了确定", Toast.LENGTH_SHORT).show();                ad.dismiss();            }        });    }}

先初始化AlertDialog和Window类,其中Window类很重要,它就是自定义AlertDialog的核心类

ad = new AlertDialog.Builder(context).create();window = ad.getWindow();

再获取屏幕宽度,设置AlertDialog的属性,再通过Window类来定义自定义AlertDialog的宽度和高度,核心方法是

window.setContentView(R.layout.alert_dialog_text_view_custom);
这里来自定义AlertDialog的布局,最后就是查找控件,设置单击事件,希望对大家有多帮助。

哦,忘记了,还有效果图:


Demo地址:http://download.csdn.net/detail/qq_23940659/9467048

2 0
原创粉丝点击