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