8

所以我看到我们可以使用灰色和白色(当 setinverse 时...)背景颜色的警报对话框。

为了了解为什么我检查了sdk的themes.xml,检查它我被引导到drawables,在那里我意识到alertdialog背景不是以编程方式完成的,而是通过一些图像完成的。这些图像保证了当我们使用 LayoutInflater 设置不同的背景颜色时,对话框顶部(标题区域)和底部(按钮区域上方)有两条灰色(或反色时为白色)水平线。

所以我的问题是,由于 LayoutInflator 没用,并且猜测我必须继承 alertdialog,你建议我做什么来生成具有不同背景颜色的 AlertDialog?我应该覆盖什么?

4

3 回答 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();
}});

就是这样。

于 2010-11-02T12:12:27.480 回答
0

我记得读过并非所有的 Android 对话框都是平等创建的。因此,如果您不想使用设备 Android 版本附带的对话框;您需要从头开始编写一个全新的对话框。

编辑:

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

于 2010-10-23T06:26:28.320 回答
0

太简单..

Dialog d=builder2.create();
...
d.show();
d.getWindow().setBackgroundDrawableResource(R.drawable.mydialog_shape);
于 2019-04-01T12:53:43.660 回答