如果父级超过650dp,则让Linearlayout宽度为650dp,否则匹配父级

时间:2017-11-30 21:25:04

标签: android android-layout

我在FrameLayout中创建一个LinearLayout,LinearLayout需要在FrameLayout中居中,但LinearLayout的宽度需要改变如下: 如果父FrameLayout超过650dp,然后将LinearLayout宽度设置为650dp,这将在线性布局的左侧和右侧留下一些余量。

如果父FrameLayout低于650dp,则设置Lineralyout宽度以匹配父级。

父FrameLayout宽度将在方向更改时更改,我尝试使用OnLayoutChangeListener,OnGlobalLayoutListener,OnAttachStateChangeListenerto检测屏幕旋转后的宽度,但它们都不起作用。

通过尝试查找父视图的宽度,我是否在正确的轨道上?

或者是否可以将父视图用作ConstraintLayout并尽可能使LinearLayout符合650并在宽度不足时扩展为父视图?

(注意我不能在不同的布局res文件夹下使用不同的值,例如sw600或sw600-land,因为父视图不一定占据整个屏幕,它可能只是屏幕上两列之一)

3 个答案:

答案 0 :(得分:1)

处理此问题的适当方法是在layout-land下创建另一个布局文件,并使用650dp的宽度。有关支持不同屏幕的更多说明see the official training here

答案 1 :(得分:0)

对于任何感兴趣的人,我根据Eugen的评论用ConstraintLayout解决了这个问题。这将确保LinearLayout的宽度在较小的屏幕(< 650dp)上与父级相匹配,并在较大的屏幕尺寸上将宽度限制为650dp

Before = kzyFw4hw8EOC/655
After = kzyFw4hw8EOC"/"655

答案 2 :(得分:0)

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="100dp"
    android:background="#f00"
    >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:maxWidth="200dp"
        android:minWidth="200dp"
        android:background="#00f"
        >
    </LinearLayout>
</LinearLayout>

enter image description here

当父宽度= 150dp时的结果

enter image description here