更改背景暗淡颜色的对话框出现在android中

时间:2014-06-02 09:35:31

标签: android dialog android-theme

您好我必须将我主题中对话框的昏暗颜色变为白色,以便通过设置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

3 个答案:

答案 0 :(得分:2)

这是一个非常古老的问题,但我想补充一点。我遇到了同样的问题,谷歌搜索了很多。然后提出了我自己的解决方案。

首先,我用这个

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

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

View.VISIBLE

背景颜色是您要用作暗淡颜色的颜色。如您所见,它在创建时是不可见的。因此,在启动对话框View.INVISIBLE之前,您需要在Activity中找到它并设置它的可见性。取消对话框后,再次将其设置为 public class MyTextBox : TextBox { static MyTextBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(typeof(MyTextBox))); TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(new PropertyChangedCallback(TextPropertyChanged))); } public MyTextBox() { PreviewTextInput +=MyTextBox_PreviewTextInput; } void MyTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e) { var tb = sender as MyTextBox; if (tb == null) return; if (IsMasking(tb) && !Regex.IsMatch(e.Text, Mask)) { e.Handled = true; } } private static bool IsMasking(MyTextBox tb) { if (string.IsNullOrWhiteSpace(tb.Mask)) return false; try { new Regex(tb.Mask); } catch (Exception) { return false; } return true; } #region Mask Dependancy property public string Mask { get { return (string)GetValue(MaskProperty); } set { SetValue(MaskProperty, value); } } // Using a DependencyProperty as the backing store for Mask. This enables animation, styling, binding, etc... public static readonly DependencyProperty MaskProperty = DependencyProperty.Register("Mask", typeof(string), typeof(MyTextBox), new PropertyMetadata(string.Empty)); #endregion } 。就是这样。

答案 1 :(得分: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"/>

答案 2 :(得分:0)

好的,我就是这样做的&#34;我不知道这些会如何与模糊标志一起表现出来#34;

  1. 我使用我选择的背景颜色为对话框创建自定义布局。
  2. 将对话框设置为填充屏幕
  3. 删除标志背后的暗淡
  4. 代码段

    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);
    

    祝你好运