Android学习之自定义AlertDialog
2016-03-08 20:19
441 查看
今天写下自定义弹出对话框AlertDialog,自定义AlertDialog有很多种,也有很多实现的方式,系统自带的AlertDialog往往功能单一,主要是样式比较丑,对于处女座简直是不能忍啊,于是就想到了自定义样式的AlertDialog,以下是Demo:
先画布局:
自定义Button的样式:
最后是代码:
先初始化AlertDialog和Window类,其中Window类很重要,它就是自定义AlertDialog的核心类
再获取屏幕宽度,设置AlertDialog的属性,再通过Window类来定义自定义AlertDialog的宽度和高度,核心方法是
这里来自定义AlertDialog的布局,最后就是查找控件,设置单击事件,希望对大家有多帮助。
哦,忘记了,还有效果图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/c9c2336571467726db324aa44b2d0276)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/fdc2f84965e1699d4f9c9adbbd23b866)
Demo地址:http://download.csdn.net/detail/qq_23940659/9467048
先画布局:
<?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
相关文章推荐
- Android Fragment 真正的完全解析(上)
- Android AlertDialog
- Android开发之实现强制下线功能(下)
- android开发中常见布局的注意点
- Warning: Activity not started, its current task has been brought to the fron
- Android开发之实现强制下线功能(上)
- 深入理解Android(1)——理解Android中的JNI
- 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)
- 一位一年android开发者的瓶颈
- Android的DHCP功能
- 安卓查看源码的相关配置
- 从源码的角度理解Android消息处理机制
- Android--多渠道打包
- 浅析Android自动化测试基础技术(一)
- Android Bundle
- Android逆向---Fiddler简易使用教程之使用(2)
- Android的启动过程分析(从进程和Framework的角度)-android学习之旅(98)
- Android的启动过程分析(从进程和Framework的角度)-android学习之旅(98)
- Android的启动过程分析(从进程和Framework的角度)-android学习之旅(98)
- Android的启动过程分析(从进程和Framework的角度)-android学习之旅(98)