【问题标题】:Centering Custom Progress Dialog居中自定义进度对话框
【发布时间】:2013-06-19 07:21:41
【问题描述】:

我创建了一个自定义 ProgressDialog,如下所示: 首先,我有一个包含 9 个连续图像的动画列表

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/icon_progress_dialog_drawable_1" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_2" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_3" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_4" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_5" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_6" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_7" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_8" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_9" android:duration="150" />

然后我有一个自定义样式

 <style name="CustomDialog" parent="@android:style/Theme.Dialog" >
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>      
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:gravity">center</item>
    <item name="android:minHeight">70dip</item>
    <item name="android:maxHeight">80dip</item>       

现在在代码中我这样称呼它

 dialog = new ProgressDialog(KaguaHome.this); 
        dialog.setProgressStyle(R.style.CustomDialog);
        dialog.setIndeterminate(true);
        dialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.progress_dialog_icon_drawable_animation));
        dialog.show();

结果是

但是我想实现一个只有图像(没有白色背景)的进度对话框,它应该居中,我应该修改什么?

【问题讨论】:

  • 我会做活动,如果你有兴趣我可以做示例代码
  • 我不希望它以编程方式完成...需要通过样式和动画来代替
  • 是的,但是恕我直言,如果您只想要一个对象在您的对话框上还有什么……您还想将它放在中心..我认为具有对话框样式的活动将是最好的解决方案
  • @akajaymo :我的回答对你的风格和动画有用吗?
  • 我已将我的发现写在您的回答下方

标签: android progressdialog


【解决方案1】:

试试这个并说出它是如何工作的。我已经尝试过了,对我来说它位于中心位置。

<style name="NewDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item ame="android:indeterminateDrawable">@anim/progress_dialog_icon_drawable_animation</item>
    </style>

并将其声明为

customDialog = new Dialog(getActivity(), R.style.NewDialog);

看看这是否有效。

【讨论】:

  • 我已经尝试过你的解决方案,我得到了中间的进度对话框,但它不是自定义的,它是默认的(居中并带有黑色背景)
  • &lt;item name="android:backgroundDimEnabled"&gt;true&lt;/item&gt; 使其为假
【解决方案2】:
    Dialog dialog = new Dialog(FlashActivity.this, android.R.style.Theme_Dialog);
    dialog.setCancelable(false);
    ImageView imageView = new ImageView(this);
    imageView.setScaleType(ScaleType.FIT_XY);       
    imageView.setBackgroundResource(R.drawable.progress_dialog_icon_drawable_animation);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(imageView);       
    dialog.setCanceledOnTouchOutside(false);
    dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.color_drawable_1));

    dialog.show();
    AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
    animationDrawable.start();

下面是color_drawable_1

   <?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@color/transparent"></item>

    </selector>  

colors.xml下面是透明的(这里可以放任何透明的颜色)

   <?xml version="1.0" encoding="utf-8"?>
   <resources>

      <color name="transparent">#00ffffff</color>

   </resources>

下面是你的progress_dialog_icon_drawable_animation

 <?xml version="1.0" encoding="utf-8"?>
 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  android:oneshot="false">

<item android:drawable="@drawable/icon_progress_dialog_drawable_1" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_2" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_3" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_4" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_5" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_6" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_7" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_8" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_9" android:duration="150" />

</animation-list>

由于您正在创建自定义对话框,因此不要将对话框创建为progressdialog 的实例。创建 使用对话框主题的 Dialog 实例。将图像视图添加到其视图内容。将您的可绘制对象设置为图像视图并启动动画。现在您必须根据需要修改窗口对话框。将其设为无标题,因为对话框主题通常带有标题,并且您必须将其背景颜色设置为任何透明颜色

尝试上述方法,您可以让我知道任何问题。它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多