Android:ProgressBar 在 activity 中看起来很奇怪
Android: ProgressBar looks strange in activity
我正在尝试为这个帖子想一个更合适的标题,但无法描述我的问题。
这是我正在使用的进度条 xml 代码:
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_centerInParent="true"/>
这是我的 AppCompatActivity 中的代码:
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setIndeterminate(true);
当 progressBar 启动时,它看起来像这样 - 这看起来像 progressBar 的过时版本:
然后几秒钟后,它变成了这种看起来像新设计的progressBar:
我不希望显示旧的进度条,如何让它从一开始就显示新设计?
这是我在 activity:
中使用的主题
<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>
我注意到当我更改布局中项目的可见性时会发生这种情况。我有一个登录按钮,单击该按钮会隐藏所有内容并显示进度条。当我单击登录按钮时,屏幕返回并在顶部显示状态栏几秒钟,并且进度条反映了旧的 non-material 主题进度条。当状态栏再次消失时,新的进度条出现在屏幕上。
这让我觉得当项目的可见性改变时主题不被尊重?
我想错了,我把这个样式放在了progressBar上:
style="@style/Widget.AppCompat.ProgressBar"
删除它会恢复到 material 主题进度条
编辑:
经查,原来是facebook SDK自带progressBar的问题。我不得不按照此线程中的建议将其取出: 为方便起见复制并粘贴到此处。
我在使用 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 的主题设置为我们的新主题:
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@style/FullyTranslucent" />
瞧!登录前的ProgressBar没有了
这是一个很好的解决方案
style="@android:style/Widget.ProgressBar.Inverse"
我正在尝试为这个帖子想一个更合适的标题,但无法描述我的问题。
这是我正在使用的进度条 xml 代码:
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_centerInParent="true"/>
这是我的 AppCompatActivity 中的代码:
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setIndeterminate(true);
当 progressBar 启动时,它看起来像这样 - 这看起来像 progressBar 的过时版本:
然后几秒钟后,它变成了这种看起来像新设计的progressBar:
我不希望显示旧的进度条,如何让它从一开始就显示新设计?
这是我在 activity:
中使用的主题<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>
我注意到当我更改布局中项目的可见性时会发生这种情况。我有一个登录按钮,单击该按钮会隐藏所有内容并显示进度条。当我单击登录按钮时,屏幕返回并在顶部显示状态栏几秒钟,并且进度条反映了旧的 non-material 主题进度条。当状态栏再次消失时,新的进度条出现在屏幕上。
这让我觉得当项目的可见性改变时主题不被尊重?
我想错了,我把这个样式放在了progressBar上:
style="@style/Widget.AppCompat.ProgressBar"
删除它会恢复到 material 主题进度条
编辑:
经查,原来是facebook SDK自带progressBar的问题。我不得不按照此线程中的建议将其取出:
我在使用 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 的主题设置为我们的新主题:
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@style/FullyTranslucent" />
瞧!登录前的ProgressBar没有了
这是一个很好的解决方案
style="@android:style/Widget.ProgressBar.Inverse"