You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android自定义Dialog中ProgressBar不动画的原因及添加方案咨询

Android自定义Dialog中ProgressBar动画不播放的问题

我在自定义Android Dialog时添加了一个进度加载圈(ProgressBar),但它完全不播放动画。相关代码如下:

Java代码:

Dialog dialog = new Dialog(this,R.style.mydialog);
dialog.setContentView(R.layout.dialog);
dialog.show();

布局文件dialog.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center">
    <ProgressBar 
        android:layout_width="@dimen/progressbar_width" 
        android:layout_height="@dimen/progressbar_height" 
        android:layout_marginTop="@dimen/progressbar_margin" 
        android:layout_marginBottom="@dimen/progressbar_margin" 
        android:indeterminateTint="@color/light_blue" 
        android:indeterminateTintMode="src_atop" />
    <TextView 
        android:id="@+id/dialog_loading_message" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/progressbar_margin" 
        android:gravity="center" 
        android:textColor="@android:color/white" 
        android:textSize="@dimen/progressbar_message_text_size" 
        android:visibility="gone" />
</LinearLayout>

当前进度加载圈完全没有动画效果,请问有人知道原因和解决办法吗?


我之前也碰到过一模一样的问题,大概率是这几个常见原因导致的,你可以逐个排查试试:

  • 检查自定义Dialog的Style是否禁用了动画
    你用了R.style.mydialog这个自定义样式,说不定里面设置了android:windowAnimationStyle="@null"这类属性,把窗口的动画给禁用了,连带影响了ProgressBar的动画。打开对应的style文件看看,如果有这类配置,要么移除它,要么给ProgressBar单独指定动画资源。

  • ProgressBar的尺寸设置过小
    你用了自定义的@dimen/progressbar_width@dimen/progressbar_height,如果这两个值设得太小,可能会让动画无法正常渲染。可以先临时改成50dp这种固定值测试下,看看动画能不能正常跑起来。

  • 未显式指定indeterminateDrawable
    自定义tint有时候会干扰默认动画的加载,你可以尝试给ProgressBar明确指定系统默认的不确定进度条Drawable:

    android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
    

    如果项目用了Material Components库,也可以把ProgressBar的style设为@style/Widget.MaterialComponents.ProgressBar.Indeterminate试试。

  • Dialog的窗口属性冲突
    如果你的自定义style里设置了android:windowIsFloating="false"或者其他特殊窗口属性,可能会导致视图动画无法正常启动。可以先简化样式,用系统默认的Dialog样式测试,确认动画正常后再逐步加自定义属性。

  • 主线程被阻塞
    要是在调用dialog.show()前后,主线程在执行耗时操作(比如网络请求、大量计算),ProgressBar的动画会因为主线程卡着而没法播放。检查下相关代码,把耗时操作移到子线程里执行就行。

优先从检查自定义Style开始排查吧,这是最常见的诱因,希望这些方法能帮你解决问题!


内容的提问来源于stack exchange,提问作者Davis Dong

火山引擎 最新活动