以下是我想要获得的结果,而我正在使用 API< = 17 和 API> = 20 :
但是对于 API 18-19 ,FrameViews的高度并不尊重layout_weight
值:
问题可能与以下事实有关:要使panelLayout
身高match_parent
,我需要添加layout_alignParentTop="true"
和layout_alignParentBottom="true"
。
这是完整的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/wrappingScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:fillViewport="true"
>
<RelativeLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_light"
>
<View
android:id="@+id/longView"
android:layout_width="150dp"
android:layout_height="600dp"
android:layout_margin="10dp"
android:background="@android:color/holo_red_light"
/>
<LinearLayout
android:id="@+id/panelLayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@id/longView"
android:layout_alignLeft="@id/longView"
android:layout_alignTop="@id/longView"
android:layout_margin="10dp"
android:background="@android:color/holo_blue_bright"
android:orientation="vertical"
>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@android:color/holo_purple"
android:padding="5dp"
>
<View
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:background="@android:color/black"
/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@android:color/holo_purple"
android:padding="5dp"
>
<View
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:background="@android:color/black"
/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
</ScrollView>
您不知道如何让Android在17级以上的每个API级别上设置相同的视图?考虑longView
动态的大小。
答案 0 :(得分:1)
将FrameLayout
更改为RelativeLayout
,其颜色为紫色,根RelativeLayout
的高度属性应为match_parent
。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/wrappingScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:fillViewport="true">
<RelativeLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@android:color/holo_green_light">
<View
android:id="@+id/longView"
android:layout_width="50dp"
android:layout_height="600dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="600dp"
android:layout_margin="10dp">
<LinearLayout
android:id="@+id/panelLayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="@android:color/holo_blue_bright"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@android:color/holo_purple"
android:padding="5dp">
<View
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:background="@android:color/black" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@android:color/holo_purple"
android:padding="5dp">
<View
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:background="@android:color/black" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</ScrollView>
答案 1 :(得分:0)
除了公认的解决方案,以下是如何以编程方式解决布局错误:
panelLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(final View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (bottom != oldBottom) {
v.post(new Runnable() {
@Override
public void run() {
v.getLayoutParams().height = mButtonsStripLeft.getHeight();
v.requestLayout();
}
});
}
}
});
它允许动态更改longView
的高度,仍然可以使解决方法正常工作。
animateLayoutChanges="true"
设置panelLayout
后,我无法使其正常工作。所以必须禁用它。