我在FrameLayout中创建一个LinearLayout,LinearLayout需要在FrameLayout中居中,但LinearLayout的宽度需要改变如下: 如果父FrameLayout超过650dp,然后将LinearLayout宽度设置为650dp,这将在线性布局的左侧和右侧留下一些余量。
如果父FrameLayout低于650dp,则设置Lineralyout宽度以匹配父级。
父FrameLayout宽度将在方向更改时更改,我尝试使用OnLayoutChangeListener,OnGlobalLayoutListener,OnAttachStateChangeListenerto检测屏幕旋转后的宽度,但它们都不起作用。
通过尝试查找父视图的宽度,我是否在正确的轨道上?
或者是否可以将父视图用作ConstraintLayout并尽可能使LinearLayout符合650并在宽度不足时扩展为父视图?
(注意我不能在不同的布局res文件夹下使用不同的值,例如sw600或sw600-land,因为父视图不一定占据整个屏幕,它可能只是屏幕上两列之一)
答案 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>
当父宽度= 150dp时的结果