Dialog样式主题标题背景使⽤【总结】
最重要的是这两⾏代码
MainActivity
public class MainActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState){
String[] array = {"不指定Dialog的主题,指定Activity使⽤系统定义的主题", //
"指定Dialog使⽤系统定义的主题", //
"设置Dialog⽆标题、背景透明效果", //
"设置AlertDialog背景透明效果", };
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
switch(position){
case 0:
startActivity(new Intent(this, Activity1.class));
break;
case 1:
startActivity(new Intent(this, Activity2.class));
break;
case 2:
Dialog dialog = new Dialog(this);//直接设置对话框主题
dialog.setContentView(R.layout.layout_dialog);
dialog.show();
break;
case 3:
AlertDialog alertDialog = new AlertDialog.Builder(this).setView(R.layout.layout_dialog).create();
alertDialog.show();
break;
}
}
}
Activity1
public class Activity1 extends ListActivity {
protected void onCreate(Bundle savedInstanceState){
String[] array = {"【Theme_Light】AlertDialog 宽⾼均会压缩到最⼩,背景上下部分有多余的⿊⾊",//【不能⽤】
"Dialog 对于内容⽽⾔,宽⾼均为设置的值,⾃带⼀个标题栏,宽度不会拉伸及填充", //【去掉标题后问题基本不存在了】
//
"【Theme_Holo_Light】AlertDialog    ⾼会压缩到最⼩,宽为固定值,背景⽆多余的⿊⾊", //【能⽤,但background圆⾓⼤于1dp的话,背景会有点⼩瑕疵】
"Dialog 对于内容⽽⾔,宽⾼均为设置的值,⾃带⼀个标题栏,宽度会被拉伸为⼀个固定值", //【去掉标题后问题基本不存在了】
//
"【          Theme_DeviceDefault_Light          】\n        设备默认根主题,与⼿机系统有关", "", //
//
"【Theme_Material_Light】AlertDialog    ⾼会压缩到最⼩,宽为固定值,背景⽆多余的⿊⾊", //【能⽤,但background圆⾓⼤于1dp的话,背景会有点⼩瑕疵】
"Dialog 对于内容⽽⾔,宽⾼均为设置的值,⾃带⼀个标题栏,宽度会被拉伸为⼀个固定值", };//【去掉标题后问题基本不存在了】
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));
setTitle("指定Activity使⽤系统定义的主题");
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
switch(position){
case 0://
case 1:
SystemThemeActivity.launch(this, android.R.style.Theme_Light, "Theme_Light", position % 2);
break;
case 2://
case 3:
SystemThemeActivity.launch(this, android.R.style.Theme_Holo_Light, "Theme_Holo_Light", position % 2);
break;
case 4://
case 5:
SystemThemeActivity.launch(this, android.R.style.Theme_DeviceDefault_Light, "Theme_DeviceDefault_Light", position % 2);
break;
case 6://
case 7:
SystemThemeActivity.launch(this, android.R.style.Theme_Material_Light, "Theme_Material_Light", position % 2);
break;
}
}
}
Activity2
public class Activity2 extends ListActivity {
protected void onCreate(Bundle savedInstanceState){
String[] array = {"【AlertDialog.THEME_HOLO_LIGHT】\nAlertDialog 和在Activity中设置此样式时⼀样",//【能⽤】,但background圆⾓⼤于1dp的话,背景会有点⼩瑕疵
"Dialog 效果真奇葩", //【不能⽤】
"【AlertDialog.THEME_DEVICE_DEFAULT_】\nAlertDialog 和在Activity中设置此样式时⼀样", //【能⽤】,但background圆⾓⼤于1dp的话,背景会有点⼩瑕疵
"Dialog 效果真奇葩", //【不能⽤】
"【Theme_Dialog】\nAlertDialog 效果真奇葩", //【不能⽤】
"Dialog 效果和在Activity中设置Theme_Light⼀样", // 对于内容⽽⾔,宽⾼均为设置的值,⾃带⼀个标题栏,宽度不会拉伸及填充【去掉标题后问题基本不存在了】
"【更改Theme_Dialog部分属性】AlertDialog 效果和在Activity中设置Theme_Light⼀样", //【不能⽤】宽⾼均会压缩到最⼩,背景上下部分有多余的⿊⾊"Dialog ⾮常完美,⼤部分⾃定义Dialog都是这么⼲的!但是⾼版本推荐使⽤DialogFragment", };//【⾮常完美】
alertdialog使用方法setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));
setTitle("指定Dialog使⽤系统定义的主题");
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
switch(position){
case 0://
case 1:
SystemThemeDialogActivity.launch(this, AlertDialog.THEME_HOLO_LIGHT, "AlertDialog.THEME_HOLO_LIGHT", position % 2);
break;
case 2://
case 3:
SystemThemeDialogActivity.launch(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT, "AlertDialog.THEME_DEVICE_DEFAULT_LIGHT", position % 2);
break;
case 4://
case 5:
SystemThemeDialogActivity.launch(this, android.R.style.Theme_Dialog, "Theme_Dialog", position % 2);
break;
case 6://
case 7:
SystemThemeDialogActivity.launch(this, R.style.DialogTheme, "更改Theme_Dialog部分属性", position % 2);
break;
}
}
}
SystemThemeActivity
/**
* 不指定Dialog的主题,指定Activity使⽤系统定义的主题
* @author⽩乾涛
*/
public class SystemThemeActivity extends Activity implements OnDismissListener {
@Override
protected void onCreate(Bundle savedInstanceState){
int themeId = getIntent().getIntExtra("themeId", 0);
String theme = getIntent().getStringExtra("theme");
int type = getIntent().getIntExtra("type", 0);
setTheme(themeId);//设定【Activity的主题】要放到调⽤⽗类⽅法之前
TextView textView = new TextView(this);
textView.setTextColor(0xffff0000);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
textView.setText(theme);
setContentView(textView);
//未指定【Dialog的主题】时,Dialog默认使⽤的是系统提供的dialogTheme主题
if(type == 0){
textView.append("        AlertDialog");
new AlertDialog.Builder(this).setView(R.layout.layout_dialog).setOnDismissListener(this).create().show();
}else{
textView.append("        Dialog");
Dialog dialog = new Dialog(this);
//questWindowFeature(Window.FEATURE_NO_TITLE);//设置Dialog没有标题。需在setContentView之前设置,在之后设置会报错
dialog.setContentView(R.layout.layout_dialog);
dialog.setOnDismissListener(this);
dialog.show();
}
}
public static void launch(Context context, int themeId, String theme, int type){
Intent intent = new Intent(context, SystemThemeActivity.class);
intent.putExtra("themeId", themeId);
intent.putExtra("theme", theme);
intent.putExtra("type", type);
context.startActivity(intent);
}
@Override
public void onDismiss(DialogInterface dialog){
finish();
}
}
SystemThemeDialogActivity
/**
* 指定Dialog使⽤系统定义的主题
* @author⽩乾涛
*/
public class SystemThemeDialogActivity extends Activity implements OnDismissListener {
@Override
protected void onCreate(Bundle savedInstanceState){
int themeId = getIntent().getIntExtra("themeId", 0);
String theme = getIntent().getStringExtra("theme");
int type = getIntent().getIntExtra("type", 0);
TextView textView = new TextView(this);
textView.setTextColor(0xffff0000);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
textView.setText(theme);
setContentView(textView);
/
/未指定【Dialog的主题】时,Dialog默认使⽤的是系统提供的dialogTheme主题
if(type == 0){
new AlertDialog.Builder(this, themeId).setView(R.layout.layout_dialog).setOnDismissListener(this).create().show();
}else{
Dialog dialog = new Dialog(this, themeId);//直接设置对话框主题
//questWindowFeature(Window.FEATURE_NO_TITLE);//设置Dialog没有标题。需在setContentView之前设置,在之后设置会报错
dialog.setContentView(R.layout.layout_dialog);
dialog.setOnDismissListener(this);
dialog.show();
}
}
public static void launch(Context context, int themeId, String theme, int type){
Intent intent = new Intent(context, SystemThemeDialogActivity.class);
intent.putExtra("themeId", themeId);
intent.putExtra("theme", theme);
intent.putExtra("type", type);
context.startActivity(intent);
}
@Override
public void onDismiss(DialogInterface dialog){
finish();
}
}
样式
<resources>
<style name="DialogTheme"parent="@android:style/Theme.Dialog">
<!-- 是否不显⽰title,这个是最重要的 -->
<item name="android:windowNoTitle">true</item>
<!-- 设置dialog显⽰区域外部的背景(透明),注意这⾥指的是dialog根布局的背景,因为本例中dialog的ContentView有圆⾓,所以圆⾓外部区域显⽰这个颜⾊ -->
<item name="android:windowBackground">@android:color/holo_red_light</item>
<!-- 设置dialog的背景(透明),注意这⾥不仅包含dialog根布局的背景,还包含本例中ImageView圆⾓外部的背景。此颜⾊值会覆盖掉windowBackground的值 -->
<item name="android:background">@android:color/transparent</item>
<!-- 设置灰度的值,当为1时,界⾯除了我们的dialog内容是⾼亮显⽰之外,其余区域都是⿊⾊的,完全看不到其他内容,系统的默认值是0.5 -->
<item name="android:backgroundDimAmount">0.5</item>
<!-- 是否允许背景灰暗,即是否让显⽰区域以外使⽤上⾯设置的⿊⾊半透明背景,设为false时,:backgroundDimAmount的值等价于0 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 是否有遮盖 -->
<item name="android:windowContentOverlay">@null</item>
<!-- 设置Dialog的windowFrame框(⽆) -->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上,必须设为true,否则⾃⼰独⽴占⼀个界⾯,这根本就不像是⼀个对话框了 -
->
<item name="android:windowIsFloating">true</item>
<!-- 是否半透明,貌似没什么卵⽤ -->
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
背景
<?xml version="1.0"encoding="utf-8"?>
<selector xmlns:android="schemas.android/apk/res/android">
<item><shape>
<solid android:color="#0f0"/>
<stroke android:width="1dp"android:color="#00f"/>
<corners android:radius="10dp"/>
</shape></item>
</selector>
内容
<?xml version="1.0"encoding="utf-8"?>
<!-- 注意:不同主题下显⽰效果⼤不相同 -->
<LinearLayout xmlns:android="schemas.android/apk/res/android" android:layout_width="180dp"
android:layout_height="180dp"
android:background="@drawable/dialog_bg"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<EditText
android:layout_margin="5dp"
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
附件列表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。