我正在尝试将 PercenRelativeLayout 用于 ListView,,但它不起作用, 高度和宽度百分比被忽略,列表视图中没有显示任何内容。 它仅适用于棉花糖。
这里是列表项xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:background="#d20404"
android:id="@+id/test_image_id"
android:layout_width="match_parent"
android:layout_height="300dp" />
<TextView
android:background="#000"
android:text="sfgfashdsfg"
android:layout_below="@+id/test_image_id"
app:layout_heightPercent="50%"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.percent.PercentRelativeLayout>
我在github
上有一个示例项目答案 0 :(得分:0)
我已将此问题打开谷歌。 答案是
未充分指定ListView行项目的高度。
第一个孩子说它想要占据行高的60%(请注意 这是heightPercent而不是aspectRatio),第二个孩子说 它想要占据行高的10%。但没有什么告诉ListView如何 整个行都要高。所以最终得到高度为0。
请注意,height = match_parent的语义在ListView中不起作用 行,如果这适用于任何一个特定的Android平台版本 (无论你说多少都可以),这纯粹是偶然的。
答案 1 :(得分:0)
我遇到了与Android K和android L相同的问题。
在android M之前,百分比布局将无法正常工作。原因是它们取决于在测量步骤中传递的大小提示。在Android M之前,大多数布局都会提供大小提示0。
将百分比相对布局转换为相对布局,并根据设备高度以编程方式设置视图的高度。
这不是一个非常优雅的解决方案,但它对我有用。
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/test_image_id"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="#d20404" />
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/test_image_id"
android:background="#000"
android:text="sfgfashdsfg" />
</RelativeLayout>
Java代码:
// to get the height of the screen
int height = getWindowManager().getDefaultDisplay().getHeight();
// to set height to each textview to 50% of screen
textView1.getLayoutParams().height = (int) (height * 0.50);