布局中ProgressBar不显示求助:旋转ProgressBar无法正常显示
嘿,我来帮你排查这个旋转ProgressBar不显示的问题!结合你给出的DrawerLayout布局代码,大概率是布局层级、属性设置或者可见性的问题,咱们一步步来解决:
先确认ProgressBar的核心属性是否正确配置
旋转ProgressBar需要开启indeterminate模式才能动起来,同时要避免和背景色“融为一体”。你可以先检查自己的ProgressBar代码是否包含这些关键属性:<ProgressBar android:id="@+id/loading_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true" <!-- 开启旋转动画的关键 --> android:indeterminateTint="@color/contrast_color" <!-- 和背景区分开的颜色 --> android:layout_gravity="center"/> <!-- 确保位置在可视区域 -->如果没设置
android:indeterminate="true",ProgressBar会是静态的,再加上和背景色接近的话,就会看起来像没显示。检查布局层级,避免被其他View覆盖
DrawerLayout的结构要求第一个子View是主内容区域,第二个是侧边栏。如果你的ProgressBar直接放在DrawerLayout下(和主内容View同级),很可能会被占满全屏的主内容View挡住。建议把ProgressBar放在主内容区域的内部,用FrameLayout作为容器,让它悬浮在内容之上:<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" tools:context="com.example.home.quoteapp.MainActivity"> <!-- 主内容区域用FrameLayout包裹,方便悬浮ProgressBar --> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 你的原有主内容布局 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- ... 你的其他控件 ... --> </LinearLayout> <!-- 旋转ProgressBar,放在顶层 --> <ProgressBar android:id="@+id/loading_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true" android:indeterminateTint="@color/black" android:layout_gravity="center"/> </FrameLayout> <!-- 侧边栏 --> <com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/drawer_menu"/> </android.support.v4.widget.DrawerLayout>检查可见性设置
不管是布局里的android:visibility还是代码中的setVisibility(),都要确保ProgressBar的状态是VISIBLE。如果代码里不小心设置成了GONE或者INVISIBLE,自然就看不到了。你可以在布局里显式加上android:visibility="visible",或者在Activity的onCreate()里手动设置:ProgressBar progressBar = findViewById(R.id.loading_progress); progressBar.setVisibility(View.VISIBLE);验证颜色对比度
如果你的@color/background是浅色,而ProgressBar默认的颜色也是浅色,就会几乎看不到。这时候用android:indeterminateTint设置一个和背景反差大的颜色,比如黑色或者深色,就能明显看到旋转效果了。
内容的提问来源于stack exchange,提问作者Kiraged

