Android自带的dialog往往不能够满足我们设计的要求,所以有的时候需要自己自定义Dialog。
例如,以下介绍如下的自定义Dialog:
思路:
1.自定义一个Dialog的Style;
2.编写自定义的Dialog类,继承自Dialog;
3.使用自定义的Dialog;
具体实现的步骤:
1.定义Style:
<style name="CustomDialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> </style>
其中的属性意思如下:
<item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无
<item name="android:windowIsFloating">true</item>:是否浮现在activity之上
<item name="android:windowNoTitle">true</item>:是否有标题栏
<item name="android:windowBackground">@android:color/transparent</item>:设置Dialog的背景
<item name="android:backgroundDimEnabled">true</item>:背景是否模糊显示
2.编写自定义的Dialog类:
a)首先需要定义我们所要显示的Dialog布局文件:/ layout / view_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:background="@drawable/defaulting_dialog_bg" <!-- defaulting_dialog_bg为背景图片 --> android:gravity="center" android:orientation="vertical" > <!-- 内容区域 --> <TextView android:id="@+id/id_dialog_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="30dp" android:textColor="@color/black" android:textSize="18sp" /> <!-- 分割线 --> <include layout="@layout/sub_line" /> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:orientation="horizontal" > <!-- 取消按钮 --> <Button android:id="@+id/id_dialog_no" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/transparent" android:gravity="center" android:textColor="@color/black" android:textSize="16sp" /> <!-- 确定按钮与取消按钮的垂直分割线 --> <ImageView android:layout_width="1.0px" android:layout_height="match_parent" android:layout_marginBottom="4dp" android:layout_marginTop="4dp" android:background="@color/grey_line" /> <!-- 取消按钮 --> <Button android:id="@+id/id_dialog_yes" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/transparent" android:gravity="center" android:textColor="@color/black" android:textSize="16sp" /> </LinearLayout> </LinearLayout>
其中的水平分割线:/ layout / sub_line.xml
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="1px" android:background="@color/grey_line" > </ImageView>
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="black">#000000</color> <color name="grey_line">#e0e0e0</color> </resources>
详细说明都在代码中:
package com.yao.custom; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.yao.R; public class CustomDialog extends Dialog implements android.view.View.OnClickListener { private static int mTheme = R.style.CustomDialog; // 自定义Dialog对应的Style private Button mYesButton; // 确定按钮 private Button mNoButton; // 取消按钮 private TextView mContent; // 内容区域 private OnCustomDialogListener mListener; // 自定义接口OnCustomDialogListener:确定按钮和取消按钮的监听器 public CustomDialog(Context context) { // 构造方法 this(context, mTheme); } public CustomDialog(Context context, int theme) { // 必须实现的构造方法 super(context, theme); } public void setCustomOnClickListener(OnCustomDialogListener listener) { // 为确定按钮和取消按钮设置监听器 mListener = listener; } private static final int MESSAGE_SET_CONTENT = 0x10; //用来执行初始化操作的消息标识 private static final int MESSAGE_SET_YES_BTN_TEXT = 0x11; private static final int MESSAGE_SET_NO_BTN_TEXT = 0x12; private static final int MESSAGE_SET_YES_BTN_TEXT_COLOR = 0x13; private static final int MESSAGE_SET_NO_BTN_TEXT_COLOR = 0x14; private Handler mHandler = new Handler() { // 统一用Handler来执行我们的初始化操作:例如设置Dialog内容,设置取消/确定按钮的文字和颜色 public void handleMessage(android.os.Message msg) { switch (msg.what) { case MESSAGE_SET_CONTENT: // 设置内容区域内容 mContent.setText((String) msg.obj); break; case MESSAGE_SET_YES_BTN_TEXT: // 设置确定按钮的文字 mYesButton.setText((String) msg.obj); break; case MESSAGE_SET_NO_BTN_TEXT: // 设置取消按钮的文字 mNoButton.setText((String) msg.obj); break; case MESSAGE_SET_YES_BTN_TEXT_COLOR: // 设置确定按钮的文字颜色 mYesButton.setTextColor(msg.arg1); break; case MESSAGE_SET_NO_BTN_TEXT_COLOR: // 设置取消按钮的文字颜色 mNoButton.setTextColor(msg.arg1); break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_dialog); // 引用以上定义的布局文件 mYesButton = (Button) findViewById(R.id.id_dialog_yes); // 控件初始化以及 mYesButton.setOnClickListener(this); mNoButton = (Button) findViewById(R.id.id_dialog_no); mNoButton.setOnClickListener(this); mContent = (TextView) findViewById(R.id.id_dialog_content); } public interface OnCustomDialogListener { // 自定义接口,确定/取消按钮的点击事件 void setYesOnClick(); // 确定按钮点击 void setNoOnClick(); // 取消按钮点击 } @Override public void onClick(View v) { // 实现OnClickListener接口 switch (v.getId()) { case R.id.id_dialog_yes: mListener.setYesOnClick(); break; case R.id.id_dialog_no: mListener.setNoOnClick(); break; } } // Dialog对外提供的设置方法,有设置内容区域内容、确定/取消按钮文字以及颜色的方法,若想添加其他功能的实现,也可通过此方法 public void setContent(String content) { android.os.Message msg = mHandler.obtainMessage(); // 用Handler发送Message来进行初始化操作 msg.what = MESSAGE_SET_CONTENT; msg.obj = content; mHandler.sendMessage(msg); } public void setYesBtnText(String yesText) { android.os.Message msg = mHandler.obtainMessage(); msg.what = MESSAGE_SET_YES_BTN_TEXT; msg.obj = yesText; mHandler.sendMessage(msg); } public void setYesBtnTextColor(int colorId) { android.os.Message msg = mHandler.obtainMessage(); msg.what = MESSAGE_SET_YES_BTN_TEXT_COLOR; msg.arg1 = colorId; mHandler.sendMessage(msg); } public void setNoBtnText(String noText) { android.os.Message msg = mHandler.obtainMessage(); msg.what = MESSAGE_SET_NO_BTN_TEXT; msg.obj = noText; mHandler.sendMessage(msg); } public void setNoBtnTextColor(int colorId) { android.os.Message msg = mHandler.obtainMessage(); msg.what = MESSAGE_SET_NO_BTN_TEXT_COLOR; msg.arg1 = colorId; mHandler.sendMessage(msg); } }
3.使用自定义的Dialog:
final CustomDialog loginDialog = new CustomDialog(getActivity()); loginDialog.setContent("您还没有登陆,不能邀请好友。是否立即登陆邀请好友?"); loginDialog.setYesBtnText("登陆"); loginDialog.setNoBtnText("暂不"); loginDialog.setYesBtnTextColor(getResources().getColor(R.color.black)); loginDialog.setCustomOnClickListener(new OnCustomDialogListener() { @Override public void setYesOnClick() { //TODO } @Override public void setNoOnClick() { loginDialog.dismiss(); } }); loginDialog.show(); //这一句不可漏 }
以上就是分享的内容,thx~
原文地址:http://blog.csdn.net/u012336923/article/details/45957635