安卓 - 自定义AlertDialog背景颜色

8

看来我们可以使用灰色和白色(在设置反转颜色时)背景色的alertdialogs。

为了知道原因,我检查了sdk的themes.xml,检查后发现alertdialog的背景不是通过程序实现的,而是通过一些图像实现的。 而这些图像保证了当我们使用LayoutInflater仅设置不同的背景颜色时,在对话框的顶部(标题区域)和底部(按钮区域正上方)会有两个灰色(或白色)水平线。

所以我的问题是,由于LayoutInflator无用,我猜测我必须子类化alertdialog,你建议我该怎么做才能生成具有不同背景颜色的AlertDialog? 我应该覆盖哪个函数?

3个回答

17

我没有使用AlertDialog,而是使用了Dialog。为了获得自定义的外观,请执行以下操作:

1-创建对话框并删除标题区域(否则您会在顶部得到一个空白的灰色区域):

myDialog = new Dialog(this);
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

2-在xml中设计布局,将其设置为对话框的内容:

myDialog.setContentView(R.layout.mydialog_layout);

3-如果布局不是圆角矩形,则会与对话框框的圆角相交。因此,请将布局设计为圆角矩形:

在mydialog_layout.xml中:

android:background = "@layout/mydialog_shape"

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
     > 
     <gradient android:startColor="#FF0E2E57" 
     android:endColor="#FF0E2E57" 
            android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
     android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape>

4-在您的活动中为按钮添加监听器:

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    myDialog.cancel();
}});

就是这样了。


上面的 'yasalUyariDialog.' 部分是什么意思?它看起来有点随机? - andy_spoo
是的,非常抱歉。已经修复了。 - ahmet emrah
你也可以使用alert来完成这个操作...你只需要先用layoutinflator填充布局,然后就和之前一样了,但是更容易分配图标和标题。 - Anthony Graglia

0

太简单了...

Dialog d=builder2.create();
...
d.show();
d.getWindow().setBackgroundDrawableResource(R.drawable.mydialog_shape);

0

我记得阅读过并非所有的Android对话框都是相同的。因此,如果您不想使用设备Android版本附带的对话框,则需要从头开始编写完全新的对话框。

编辑:

我认为您需要使用自定义对话框构建器类覆盖onCreateDialog。就像我说的那样,我从未这样做过。请记住,为了保持Android MVC风格,您还需要在XML中定义对话框。如果我要这样做,我可能会从XML布局开始,然后使用与常规对话框构建器类相同的方法编写自定义对话框类。抱歉我讲得有些含糊,我自己还在学习Java和Android。


+1 感谢您的回答。那么,我应该重写哪些方法才能获得一个功能性的自定义对话框呢? - ahmet emrah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接