【问题标题】:Let Linearlayout width be 650dp if parent is over 650dp, otherwise match parent如果父级超过 650dp,让 Linearlayout 宽度为 650dp,否则匹配父级
【发布时间】:2017-12-01 09:03:38
【问题描述】:

我在FrameLayout里面创建了一个LinearLayout,LinearLayout需要在FrameLayout里面居中,但是LinearLayout的宽度需要改变如下: 如果父 FrameLayout 超过 650dp,则设置 LinearLayout 宽度为 650dp,这样会在线性布局的左右留下一些边距。

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

父FrameLayout宽度会随着方向改变而改变,我尝试使用OnLayoutChangeListener、OnGlobalLayoutListener、OnAttachStateChangeListener来检测屏幕旋转后的宽度,但都不起作用。

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

或者是否可以将父视图用作ConstraintLayout,并在可能的情况下使内部的LinearLayout符合650,并在宽度不够时扩展为父视图?

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

【问题讨论】:

  • ConstraintLayout(不是CoordinatorLayout)的孩子可以指定app:layout_constraintWidth_max

标签: android android-layout


【解决方案1】:

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

【讨论】:

  • 问题是我不能假设屏幕宽度等于 parentView 宽度,例如父 frameLayout 可能位于平板电脑横向的两列之一中。在这种情况下,即使屏幕宽度为 sw720,我可能仍需要使其与父级匹配。
  • 不过,您可以应用我在宽度限定符上提到的相同逻辑。这意味着您将创建一个新的 styles.xml 并为其提供 650dp 宽度限定符,然后您将在其中定义线性布局的宽度。您绝对应该在上面的同一个链接中看到如何为不同的宽度创建不同的样式。
  • 如果我在 sw720 中使用 650 定义样式并在 720 宽度的屏幕上有两列视图,则该列可能只有 300dp 宽,在这种情况下,设置 650 会使视图比屏幕宽
【解决方案2】:

对于任何感兴趣的人,我根据 Eugen 的评论使用 ConstraintLayout 解决了它。这将确保 LinearLayout 的宽度在较小的屏幕(

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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="wrap_content">

  <LinearLayout
      android:id="@+id/row_content"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintWidth_max="650dp"/>
</android.support.constraint.ConstraintLayout>

【讨论】:

    【解决方案3】:
    <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 时的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多