【问题标题】:Android RelativeLayout sync widthAndroid RelativeLayout 同步宽度
【发布时间】:2014-07-17 22:01:47
【问题描述】:

我有一个LinearLayout,其中包含另外两个RelativeLayouts(方向水平)。我不知道运行时左侧RelativeLayout 的宽度。是否可以同步两种布局?如果左边RelativeLayout的宽度是100dp,那么右边的RelativeLayout也应该是100dp。或者两者都应该是 50dp

我可以在 XML 文件中处理这个问题,还是让我通过代码将LayoutParams 设置为相同的值?

【问题讨论】:

  • 你是在问两者是否可以占据屏幕的同一部分?
  • 你可以试试wrap_content,左边是alignParentLeft,右边是alignRight

标签: android android-layout android-relativelayout


【解决方案1】:

在每个RelativeLayout中设置宽度为0dp,权重为1

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal" >

  <RelativeLayout
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:layout_weight="1" >
  </RelativeLayout>

  <RelativeLayout
      android:layout_width="0dp"
      android:layout_height="match_parent" 
      android:layout_weight="1">
  </RelativeLayout>

</LinearLayout>

【讨论】:

  • 这是不可能的,因为RelativeLayouts 的左/右都应该有一个空格。它们应该居中对齐。
  • 在父 LinearLayout 中设置 padding 或在每个子 RelativeLayout 中设置边距
【解决方案2】:

如果它是动态宽度 - 没有 xml 方法可以做到这一点。 在xml中你只能:

  1. 为两个相对布局设置固定宽度
  2. 设置线性布局的固定宽度(或匹配父级),对于相对布局使用 width="0dp" 和 weight=1

【讨论】:

    【解决方案3】:

    如果第一个布局的宽度未知,则需要使用类似的技巧:

     firstRelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    
            public void onGlobalLayout() {
                secondRelativeLayout.getLayoutParams().width=firstRelativeLayout.width;
                secondRelativeLayout.requestLayout();
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多