如何在Dialog上设置TextView的主题?

时间:2013-02-25 13:55:25

标签: android dialog textview themes

我正在使用以下代码将TextView添加到Dialog:

TextView alertView=new TextView(this);
alertView.setTextAppearance(this, android.R.style.TextAppearance_Medium);
alertView.setPadding(7, 7, 7, 7);
alertView.setText(Html.fromHtml(alertText));

Dialog dialog=new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(alertView);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
dialog.show();

在Android 4.0中它看起来不错。但在Android 2.1中,Dialog的背景是黑色的,而TextView的文本也是黑色的。如何解决?

4 个答案:

答案 0 :(得分:2)

要为Dialog设置整体样式,请在资源中定义样式。

例如:

<style name="MyDialog">
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFrame">@null</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:windowBackground">@android:drawable/alert_light_frame</item>
</style>

然后将其设置为您的对话框,如下所示:

Dialog dialog=new Dialog(this, R.style.MyDialog);

答案 1 :(得分:1)

问题是你的TextView正在使用你活动中的主题而不是对话框的主题。

您应该将对话框的上下文传递给TextView的构造函数:

Dialog dialog=new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

TextView alertView=new TextView(dialog.getContext());
alertView.setTextAppearance(this, android.R.style.TextAppearance_Medium);
alertView.setPadding(7, 7, 7, 7);
alertView.setText(Html.fromHtml(alertText));

dialog.setContentView(alertView);
dialog.show();

答案 2 :(得分:0)

我猜你必须创建一个自定义对话框。 http://developer.android.com/guide/topics/ui/dialogs.html。这是自定义对话框的示例。 http://www.mkyong.com/android/android-custom-dialog-example/

答案 3 :(得分:0)

如果您可以将textview的颜色更改为白色,那么每个版本都可以,如果需要黑色,则将textview背景颜色更改为白色

1.alertView.setTextColor(Color.WHITE);
2.alertView.setBackgroundColor(Color.white);