Android:ProgressBar 在活动中看起来很奇怪

Posted

技术标签:

【中文标题】Android:ProgressBar 在活动中看起来很奇怪【英文标题】:Android: ProgressBar looks strange in activity 【发布时间】:2016-03-02 08:39:25 【问题描述】:

我试图为这个帖子想一个更合适的标题,但无法描述我的问题。

这是我正在使用的 progressBar xml 代码:

<ProgressBar
    android:layout_
    android:layout_
    android:id="@+id/progressBar"
    android:layout_centerInParent="true"/>

这是我的 AppCompatActivity 中的代码:

progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setIndeterminate(true);

progressBar 启动时,它看起来像这样 - 看起来像是过时版本的progressBar:

然后几秒钟后,它变成了这种看起来像新设计的progressBar:

我不希望显示旧的进度条,如何让它从一开始就显示新设计?

这是我在活动中使用的主题:

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="Theme.AppCompat.NoActionBar">

    <item name="android:windowBackground">@color/primary</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/deep_orange_500</item>
    <item name="colorControlNormal">@color/iron</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">@color/white</item>
    <item name="android:textColorHint">@color/iron</item>
    <item name="colorButtonNormal">@color/primary_darker</item>
    <item name="android:colorButtonNormal">@color/primary_darker</item>
</style>

我注意到当我更改布局中项目的可见性时会发生这种情况。我有一个登录按钮,单击该按钮会隐藏所有内容并显示进度条。当我点击登录按钮时,屏幕返回并在顶部显示状态栏几秒钟,并且进度条反映了旧的非物质主题进度条。当状态栏再次消失时,屏幕上会出现新的进度条。

这让我觉得当项目的可见性改变时,主题没有得到尊重?

【问题讨论】:

貌似材质主题 我想是这样,但不知道如何将其更改为材质主题 - 我已将样式附加到这篇文章中。 使用AppCompat主题 但我正在使用 AppCompat。 可以设置style="@style/Widget.AppCompat.ProgressBar" 【参考方案1】:

我想错了,我把这个样式放在了progressBar上:

    style="@style/Widget.AppCompat.ProgressBar"

删除它使其恢复到材质主题progressBar

编辑:

经过进一步调查,实际上是由于facebook SDK中包含的progressBar。我不得不按照此线程中的建议将其取出:Android: How to hide progress circle in Facebook login 复制并粘贴到此处为您提供方便。

我在使用 facebook sdk 4.x 时遇到了同样的问题。当我单击 facebook 登录按钮时,Facebook Activity 显示为半透明,但它显示了一个进度条。幸运的是,我们可以在主题中禁用此进度条。所以 Facebook Activity 被声明为

<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

我们所要做的就是创建一个继承自 Theme.Translucent.NoTitleBar 的样式并隐藏进度条:

<style name="FullyTranslucent" parent="android:Theme.Translucent.NoTitleBar">
    <item name="android:progressBarStyle">@style/InvisibleProgress</item>
</style>

<style name="InvisibleProgress">
    <item name="android:visibility">gone</item>
</style>

现在将活动的主题设置为我们的新主题:

<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"
    android:theme="@style/FullyTranslucent" />

瞧!登录前的进度条消失了。

【讨论】:

【参考方案2】:

这是一个很好的解决方案

style="@android:style/Widget.ProgressBar.Inverse"

【讨论】:

为什么这是一个好的解决方案?你能edit你的答案解释一下吗?

以上是关于Android:ProgressBar 在活动中看起来很奇怪的主要内容,如果未能解决你的问题,请参考以下文章

在回收器视图适配器android Kotlin之外更新ProgressBar

以编程方式创建和显示 ProgressBar

DialogFragment 和 ProgressBar 在任务更新时更新

android 怎么让progressbar自增长

如何在 Android 中制作“忙碌”动画?

一起学Android之ProgressBar