以下是列表视图项的非常简化的布局,它可以在多个不同的 android 4.x 设备上按预期运行,但不能在 android 2.3(设备和模拟器)上运行。
预期:进度条应覆盖该项目的整个背景,水平和垂直。
在 Android 2.3 上:当进度设置 > 0 时,进度条始终显示为已满,并且高度未覆盖整个项目,仅覆盖顶部。
布局xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shadowBackgroundHolder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selected_shadow_top_and_bottom" >
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="0dp"
android:padding="0dp"
android:progressDrawable="@drawable/progress_timer" />
<TextView
android:id="@+id/currentTime"
android:layout_width="wrap_content"
android:layout_height="50dp" />
<TextView
android:id="@+id/timer_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</FrameLayout>
我尝试了不同的东西等,包括进度条最大值,以编程方式和在 xml 中。我尝试使用相对布局(和隐式 z 排序)而不是框架布局,同样的问题。0dp 填充和边距也无关紧要。
有趣的是,当使用 wrap_content 作为宽度时,也会出现同样的问题,尽管会显示一个较短的进度条,但当进度设置为大于 0 时仍然总是填充。在此示例中,其中一个 TextView 的 50dp 高度只是为了清楚地显示截图中的问题,没关系。
其他人能否证实这一点,甚至更好地知道为什么行为不同?更好的是,解决方法或解决方案?
我可以让进度条在 2.x 设备上使用不同的布局完全不涉及使其覆盖整个高度。这是在当前版本的应用程序中,但下一个版本将利用整个项目高度来代替进度。为 2.x 设备选择该解决方案并不是最佳解决方案。
更新:使用 RelativeLayout 的示例,我可以让它覆盖整个高度,但进度总是 full。在进度条元素上使用以下附加属性:
android:layout_alignBottom="@id/content"
android:layout_alignLeft="@id/content"
android:layout_alignTop="@id/content"
在 Android 2.3 设备上,确实是全高度,但如果进度 > 0,进度仍然是满的: