【问题标题】:Setting animation and no frame for AlertDialog为 AlertDialog 设置动画和无帧
【发布时间】:2018-11-26 19:58:46
【问题描述】:

我已经为此苦苦挣扎了好几个小时,如果这是一个愚蠢的问题,我很抱歉。

我想打开一个带有动画的 AlertDialog(使背景变暗)。 对话框视图是一个 WebView。我尝试了两种方法:

1) 带有xml风格的AnimatedDialog:

<style name="AnimatedDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/AnimatedDialogAnimation</item>
</style>

在代码中调用

 builder = new AlertDialog.Builder(context, R.style.AnimatedDialog);

这种方法的问题是对话框有一个丑陋的框架,可能是因为parent="@android:style/Theme.Dialog" 是错误的,但我找不到AlertDialog 的正确框架。所以我尝试了这个:

2) 通过WindowManager.LayoutParams:

    WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
    lp.windowAnimations = R.style.AnimatedDialog;
    dialog.getWindow().setAttributes(lp);

现在的问题是对话框没有动画(为什么??)。

此外,在这两种情况下,对话框在显示之前都会短暂“闪烁”,换句话说,我可以看到它正在“构建”。也许是因为 WebView?

有人可以指导我如何正确执行此操作吗?

谢谢!!

【问题讨论】:

    标签: android android-alertdialog


    【解决方案1】:

    这是我的自定义动画警报对话框

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.MyDialogAnimationTheme);
        builder.setCancelable(true);
        LayoutInflater layoutInflater = getActivity().getLayoutInflater();
        View view = layoutInflater.inflate(R.layout.alert_can_continue,null);
        relativeLayout = (RelativeLayout) view.findViewById(R.id.call_layout_holder);
        relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
    
            }
        });
        positive = (TextView) view.findViewById(R.id.tv_positive);
        positive.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
            }
        });
        negative = (TextView) view.findViewById(R.id.tv_negative);
        negative.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
            }
        });
        builder.setView(view);
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
    

    这是styles.xml

     <style name="MyDialogAnimationTheme" parent="Base.Theme.AppCompat.Dialog.Alert">
        <item name="android:windowAnimationStyle">@style/MyDialogAnimation.Window</item>
        </style>
    <style name="MyDialogAnimation.Window" parent="@android:style/Animation.Dialog">
            <item name="android:windowEnterAnimation">@anim/anim_in</item>
            <item name="android:windowExitAnimation">@anim/anim_out</item>
        </style>
    

    【讨论】:

      【解决方案2】:

      经过大量的工作,我想出了如何去做。这样,我就不会触及默认的 AlertDialog 主题了。

          ...
          AlertDialog.Builder builder = new AlertDialog.Builder(context);
          builder.setIcon(R.drawable.ic_launcher).setView(myMsg);
          AlertDialog dialog = builder.create();
      
          WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
          lp.windowAnimations = R.style.AnimateDialog;
      
          if (fillscreen) {
              lp.height = LayoutParams.FILL_PARENT;
              lp.width = LayoutParams.FILL_PARENT;
          } else { 
              lp.height = LayoutParams.WRAP_CONTENT;
              lp.width = LayoutParams.WRAP_CONTENT;
          }
          if (fullscreenpref)
              lp.flags = android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN |
                         android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
      
          dialog.show();
          dialog.getWindow().setAttributes(lp);
      }
      

      如果我反转最后两行,则在更改方向时对话框会崩溃,原因是:How to handle screen orientation change when progress dialog and background thread active?

      不过,对话框在打开时会轻微“闪烁”。我不知道为什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多