Android开发:ProgressBar静态灰色环形背景不显示问题求助
实现带静态灰色圆形背景的ProgressBar问题
我想要实现一个带有静态灰色圆形背景的ProgressBar,但设置ring形状的背景完全不显示,测试oval、rectangle形状时可以正常显示。当前代码如下:
main_layout.xml
<View android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center" android:background="@drawable/progress_bar_background" android:layout_marginBottom="-48dp" /> <ProgressBar android:id="@+id/process_loading_circle" style="?android:attr/progressBarStyle" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center" android:indeterminateTint="@color/limeGreen" />
progress_bar_background.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring"> <solid android:color="@color/grey" /> <size android:width="48dp" android:height="48dp" /> <stroke android:thickness="4dp" android:thicknessRatio="2" /> </shape>
问题原因与解决方案
ring形状不显示是因为缺少关键属性配置:一是solid属性对ring形状无效,需用stroke定义环形颜色;二是必须指定内环半径相关属性,同时开启useLevel="false"才能让环形正常显示。
修改后的progress_bar_background.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadiusRatio="2.5" <!-- 控制内环大小,数值越大内环越小 --> android:thickness="4dp" android:useLevel="false"> <!-- 必须设置为false,否则环形不显示 --> <stroke android:width="4dp" android:color="@color/grey" /> <!-- 用stroke定义环形的颜色和厚度 --> </shape>
布局优化建议
原代码用负margin实现控件重叠的方式不够规范,建议用FrameLayout包裹两个控件,通过居中对齐实现重叠效果:
<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <View android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center" android:background="@drawable/progress_bar_background" /> <ProgressBar android:id="@+id/process_loading_circle" style="?android:attr/progressBarStyle" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center" android:indeterminateTint="@color/limeGreen" /> </FrameLayout>
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

