关于自定义dialog的样式
程序员文章站
2022-05-16 14:35:33
...
先上图:
前面三种均为系统dialog
前两种使用了自定义样式,第三种完全不使用样式
后面两种为自定义布局,使用了自定义样式
运行环境为安卓5.0
其中,第三种虽然没有指定样式,但是系统会根据当前系统版本去设置样式,比如图中用的就是5.0的样式,但是在4.1的机器上运行的时候效果跟第二种是一样的
如果想在任何环境都实现5.0版本的样式,可以使用自定义布局的方式去实现,虽然稍微麻烦些
自定义样式的主要修改部分
<style name="dialog" parent="@android:style/Theme.Dialog">
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置dialog的背景-->
<item name="android:background">@android:color/transparent</item>
<!--背景颜色及和透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否去除标题 -->
<item name="android:windowNoTitle">true</item>
<!--是否去除边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">false</item>
<!--如果背景需要模糊,模糊到什么程度,当值为1 时,除了dialog以外的部分全黑-->
<item name="android:backgroundDimAmount">0.7</item>
</style>
demo中的代码:
public class DialogActivity extends Activity{
@BindView(R.id.button_1)
Button button_1;
@BindView(R.id.button_2)
Button button_2;
@BindView(R.id.button_3)
Button button_3;
@BindView(R.id.button_4)
Button button_4;
@BindView(R.id.button_5)
Button button_5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
ButterKnife.bind(this);
}
@OnClick({R.id.button_1,R.id.button_2,R.id.button_3,R.id.button_4,R.id.button_5})
void click(View view){
switch (view.getId()){
case R.id.button_1://系统黑
showMyDialog(R.style.dialog_black);
break;
case R.id.button_2://系统白
showMyDialog(R.style.dialog_white);
break;
case R.id.button_5://系统白2
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("测试")
.setMessage("测试内容")
.setPositiveButton("确定",null)
.setNegativeButton("取消",null);
builder.create().show();
break;
case R.id.button_3://完全自定义
showMydialog2(R.style.dialog_black);
break;
case R.id.button_4://完全自定义
showMydialog2(R.style.dialog_white);
break;
default:
break;
}
}
void showMyDialog(int style){
AlertDialog.Builder builder=new AlertDialog.Builder(this,style);
builder.setTitle("测试")
.setMessage("测试内容")
.setPositiveButton("确定",null)
.setNegativeButton("取消",null);
builder.create().show();
}
void showMydialog2(int style){
View view= LayoutInflater.from(this).inflate(R.layout.dialog_test,null);
AlertDialog.Builder builder=new AlertDialog.Builder(this,style);
AlertDialog dialog=builder.create();
dialog.show();
dialog.getWindow().setContentView(view);
}
}
用到的自定义样式
<style name="dialog_black" parent="android:Theme.Holo.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
</style>
<style name="dialog_white" parent="android:Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
</style>