两种自定义对话框的方法
第一种:使用Activity来实现自定义对话框。
1. 定义根布局是RelativeLayout。
2. 定义主布局在根布局的中间,需要设定属性centerInParent=”true”。
具体见sms_confirm_dialog.xml解析。
代码片段:
public class ConfirmActivity extends BaseActivity {
protected void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.sms_confirm_dialog);
}
}
Intent it = new Intent(mContext, ConfirmActivity.class);
startActivityForResult(it, TxrjConstant.REQUEST_CONFIRM);
背景全为黑是怎么回事?
修改setContentView之后背景仍然是黑色。
View view = LayoutInflater.from(this).inflate(R.layout.sms_confirm_dialog, null);
view.getBackground().setAlpha(10);
setContentView(view);
设定theme之后竟然会多了灰色的边框出来,边框内部是黑色填充。
setTheme(android.R.style.Theme_Dialog);
参考:http://blog.csdn.net/tianshuguang/article/details/6898355
在Manifest.xml文件中设定android:theme竟然让黑色背景消失了,只留下黑色的边框。
<activity android:name=".activity.ConfirmActivity"
android:theme="@android:style/Theme.Dialog"/>
修改android:theme,改为如下,然后就不再出现黑色边框。
<activity android:name=".activity.ConfirmActivity"
android:theme="@style/dialog_translucent"/>
<style name="dialog_translucent" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/translucent_background</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>
</style>
虽然实现了对话框。但是点击半透明的位置,window会自动关闭。
查看android对系统样式Theme.Dialog的定义,找到属性windowCloseOnTouchOutside与此有关。
将它的值在dialog_translucent重新设定为false。
<item name="android:windowCloseOnTouchOutside">false</item>
android系统对样式Theme.Dialog的定义。
<style name="Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>
<item name="android:windowBackground">@android:drawable/panel_background</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
<item name="android:windowActionModeOverlay">true</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="textAppearance">@android:style/TextAppearance</item>
<item name="textAppearanceInverse">@android:style/TextAppearance.Inverse</item>
<item name="textColorPrimary">@android:color/primary_text_dark</item>
<item name="textColorSecondary">@android:color/secondary_text_dark</item>
<item name="textColorTertiary">@android:color/tertiary_text_dark</item>
<item name="textColorPrimaryInverse">@android:color/primary_text_light</item>
<item name="textColorSecondaryInverse">@android:color/secondary_text_light</item>
<item name="textColorTertiaryInverse">@android:color/tertiary_text_light</item>
<item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_only</item>
<item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_only</item>
<item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisable</item>
<item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisable</item>
<item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisable</item>
<item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisable</item>
<item name="textColorHint">@android:color/hint_foreground_dark</item>
<item name="textColorHintInverse">@android:color/hint_foreground_light</item>
<item name="textColorSearchUrl">@android:color/search_url_text</item>
<item name="textAppearanceLarge">@android:style/TextAppearance.Large</item>
<item name="textAppearanceMedium">@android:style/TextAppearance.Medium</item>
<item name="textAppearanceSmall">@android:style/TextAppearance.Small</item>
<item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverse</item>
<item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverse</item>
<item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverse</item>
<item name="listPreferredItemPaddingLeft">10dip</item>
<item name="listPreferredItemPaddingRight">10dip</item>
</style>
定义样式的文件所在位置:
android-sdk-windows\platforms\android-16\data\res\values\themes.xml
第二种:使用Dialog来实现自定义对话框。
private void confirm() {
Dialog dialog = new Dialog(this, R.style.dialog);
dialog.setContentView(R.layout.sms_confirm_dialog);
dialog.setCancelable(true);
dialog.show();
}
在onBackPressed()方法中调用
confirm();
注意:不要执行super.onBackPressed()方法,否则点击back键就返回到上一个界面。
需要在values/styles.xml文件中定义
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
解析sms_confirm_dialog.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#00000000"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_centerInParent="true" // 在屏幕的中间
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="180dip"
android:background="#00000000" // 透明的背景
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip">
<FrameLayout
android:background="@drawable/dialog_title"
android:layout_width="match_parent"
android:layout_height="50dip">
<TextView
android:text="alert"
android:textSize="16dip"
android:textColor="@color/white"
android:layout_gravity="center" // TextView控件位于FrameLayout的中间
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"/> // 透明的背景
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="@color/white">
<TextView
android:text="No valid recipient, do you abort?"
android:textSize="16dip"
android:textColor="@color/black"
android:gravity="center_vertical" // 将文字显示在TextView的垂直方向的中间
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:background="@color/white"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dip"
android:orientation="vertical"
android:background="@android:color/transparent">
<TextView
android:layout_width="match_parent"
android:layout_height="1dip" // 使用颜色来定义单色横线
android:background="#999999"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dip"
android:orientation="horizontal"
android:background="@android:color/transparent">
<TextView
android:text="Yes"
android:textSize="16dip"
android:textColor="@color/black"
android:gravity="center" // 将文字显示在TextView的中间
android:layout_width="0dip"
android:layout_weight="1" // 伸缩充满剩余空间
android:layout_height="match_parent"
android:background="#CCCCCC"/>
<TextView
android:layout_width="1dip" // 使用颜色来定义单色竖线
android:layout_height="match_parent"
android:background="#999999"/>
<TextView
android:text="No"
android:textSize="16dip"
android:textColor="@color/black"
android:gravity="center" // 将文字显示在TextView的中间
android:layout_width="0dip"
android:layout_weight="1" // 伸缩充满剩余空间
android:layout_height="match_parent"
android:background="#CCCCCC"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
相关文章
- dos下拷贝服务器文件命令行,win7在DOS环境下怎么使用copy命令?使用copy命令复制文件的方法…[通俗易懂]
- Java多线程wait()和notify()方法图解
- Material Design之CollapsingToolbarLayout 相关属性和方法介绍
- jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法
- Django admin admin_order_field 自定义字段排序实现方法
- HBase性能优化方法总结(一)详解大数据
- bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数详解编程语言
- Python MRO方法解析顺序详解
- Shell自定义快捷键方法详解
- Linux下创建新目录的简单方法(linux的创建目录)
- MySQL实现存储对象数组的方法(mysql存储对象数组)
- Linux查看磁盘剩余空间的简单方法(linux查看剩余空间)
- Oracle技术节省表空间的方法(oracle 减小表空间)
- MySQL储存中文问题解决方法(mysql不能存放中文)
- 解决redis脏读的新型方法(对redis脏读)
- MySQL安装问题找不到安装包解决方法(mysql下载安装找不到)
- 解决asp.netSharepoint无法连接发布自定义字符串处理程序,不能进行输出缓存处理的方法
- sqlserver中的自定义函数的方法小结
- 用Linux构建高效FTP服务器方法分享
- 自定义实现Json字符串向C#对象转变的方法
- Android自定义View设定到FrameLayout布局中实现多组件显示的方法分享
- 盘点提高Python代码效率的方法
- Android中自定义标题栏样式的两种方法
- 64位系统中IIS7运行ASP时出现ADODB.Connection800a0e7a错误的解决方法
- Git客户端TortoiseGit(Windows系统)的使用方法