【问题标题】:Changing Background dim color for dialog appears in android更改对话框的背景暗淡颜色出现在android中
【发布时间】:2014-06-02 09:35:31
【问题描述】:

您好,我必须将主题中对话框的暗色更改为白色,以便通过设置 layoutParams.dimAmount = 0.5f;我可以在对话框背景中获得模糊白色。
我正在使用

<style name="MyDialog" parent="@android:style/Theme.Holo.Light.Dialog">
            <item name="android:windowBackground">@color/dialog_dim_background</item>
    </style>

并遵循以下参考
How do I create a transparent Activity on Android?
Custom screen dim with Dialog

【问题讨论】:

  • 我已经回答了一个类似的问题,你可以找到我的答案here
  • mmm... 设置 android:windowBackground 属性不会改变 Dialog 的暗色

标签: android dialog android-theme


【解决方案1】:

这是一个非常古老的问题,但我想添加 n 个答案。我遇到了同样的问题并用谷歌搜索了很多。然后想出了我自己的解决方案。

首先,我用这个完全消除了暗淡

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

然后我打开了我的布局(它是RelativeLayout)并将这个视图放在其中作为最后一个元素

<View
        android:id="@+id/shade"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/primaryShadow"
        android:visibility="invisible"/>

背景色是您要用作暗色的颜色。如您所见,它在创建时是不可见的。因此,您需要在 Activity 中找到它并设置它的可见性,然后再将对话框启动到View.VISIBLE。取消对话框时,再次将其设置为View.INVISIBLE。就是这样。

【讨论】:

    【解决方案2】:

    我知道这是一个非常古老的问题,但这肯定会对使用 AppCompatActivity 或 ActionBarActivity 的人有所帮助。如果您正在为您的活动设置一个对话框或说 DialogActivity,那么下面的内容也将起作用!

        dialog = new Dialog(ActivityName.this);
        dialog .setCancelable(false);
        dialog .setContentView(R.layout.dialog_layout);
        Window window = dialog.getWindow();
        if(window != null){
           window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
           window.setDimAmount(0.5f);
           //If you are setting a dialog activity
                DisplayMetrics displayMetrics = new DisplayMetrics();
              getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
                Double dialogWidth = displayMetrics.widthPixels * 0.50;
                window.setLayout(dialogWidth.intValue(), 
                     WindowManager.LayoutParams.WRAP_CONTENT); //Setting it cover half of the screen width
       }
       dialog.show();
    

    就在您关闭对话框之前,

    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    dialog.dismiss();
    

    //如果是设置对话框活动,在styles.xml中创建样式:

    <style name="MyTheme" parent="@style/Theme.AppCompat.Light.Dialog">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
            <item name="android:backgroundDimEnabled">false</item>
    </style>
    

    然后在你的 Manifest 中设置主题:

    <activity android:name=".view.POSSelectCustomerDialogActivity"
      android:theme="@style/MyTheme"
      android:windowSoftInputMode="stateAlwaysHidden|adjustResize"/>
    

    【讨论】:

      【解决方案3】:

      好吧,我就是这样做的“我不知道这些在模糊标志下会如何表现”

      1. 我使用我选择的背景颜色为对话框创建自定义布局。
      2. 将对话框设置为全屏
      3. 去掉后面的暗淡标志

      代码sn-p

      Dialog dialog = new Dialog(this);
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
      dialog.setContentView(R.layout.dailog_layout);
      dialog.getWindow().setBackgroundDrawable(
      new ColorDrawable(0));
      dialog.getWindow().setLayout(LayoutParams.FILL_PARENT,
      LayoutParams.FILL_PARENT);
      dialog.getWindow().clearFlags(
      WindowManager.LayoutParams.FLAG_DIM_BEHIND);
      

      祝你好运

      【讨论】:

        猜你喜欢
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 2013-12-29
        • 2011-09-10
        相关资源
        最近更新 更多