2

我正在尝试使用 Android 布局权重属性。我想要一个带有“3 个子布局”的垂直布局第一个将占用 25% 的空间,第二个占用 50% 的空间,最后一个占用 25% 的空间。当我尝试添加到最后一个布局时,一切都不起作用。这些布局中的每一个的权重应该是多少?

我让权重属性仅使用 2 个布局/元素即可正常工作,并了解它是如何工作的,但是当我尝试使用 3 个时,我遇到了问题。

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:orientation="horizontal"
    android:weightSum="100" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
        android:layout_weight="25" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
       android:layout_weight="50" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
        android:layout_weight="25" >
    </LinearLayout>
</LinearLayout>
4

5 回答 5

4

确保将android:width所有子布局的属性设置为 0dp,然后确保您已weight指定。如果您需要更详细的说明,则需要粘贴您的代码。

于 2012-04-23T20:12:22.097 回答
4

尝试使用此代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:weightSum="100">
  <LinearLayout
     android:layout_width="0dp"
     android:layout_height="100dp"
     android:orientation="vertical"
     android:layout_weight="25">
  </LinearLayout>
  <LinearLayout
     android:layout_width="0dp"
     android:layout_height="100dp"
     android:orientation="vertical"
     android:layout_weight="50" >
  </LinearLayout>
  <LinearLayout
     android:layout_width="0dp"
     android:layout_height="100dp"
     android:orientation="vertical"
     android:layout_weight="25">
  </LinearLayout>
</LinearLayout>
于 2017-05-22T05:20:19.833 回答
2

还有另一种使用不太复杂的布局树来实现此结果的方法。您可以PercentRelativeLayout从Android的百分比支持库中使用。只需将此库导入您的项目,然后查看以下代码:

<android.support.percent.PercentRelativeLayout
    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="match_parent">

    <LinearLayout
        android:layout_height="100dp"
        android:layout_toLeftOf="@+id/middle"
        android:layout_weight="25"
        android:orientation="vertical"
        app:layout_widthPercent="25%">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/middle"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_weight="50"
        android:orientation="vertical"
        app:layout_widthPercent="50%">
    </LinearLayout>

    <LinearLayout
        android:layout_height="100dp"
        android:layout_toRightOf="@+id/middle"
        android:layout_weight="25"
        android:orientation="vertical"
        app:layout_widthPercent="25%">
    </LinearLayout>

</android.support.percent.PercentRelativeLayout>
于 2016-08-15T10:29:58.960 回答
0

好吧,首先,权重只能应用于LinearLayouts或派生自LinearLayout. weightSum孩子的权重应该是属性的百分比LinearLayout。如果你设置weightSum=1你的 parent LinearLayout,那么你的第一个孩子的百分比应该是 0.25,第二个孩子应该是 0.5,第三个孩子应该是 0.25。

编辑:就像javram 说的。您需要分别设置宽度或高度,0dp具体取决于LinearLayout是水平方向还是垂直方向。

编辑2:另外,我认为您不必实际指定weightSum. 它有帮助,但我相信LinearLayout只会根据孩子们各自的体重来划分孩子。如果孩子 1 的体重是孩子 2 体重的两倍,那么孩子 2 在屏幕上将是孩子 1 的两倍。因此,在您的情况下,只需确保孩子 1 和 3 的重量相同,而孩子 2 的重量是其他两个孩子的两倍。

于 2012-04-23T20:14:30.643 回答
-1
LinearLayout java1,java2,java3;

    java1=(LinearLayout)findViewById(R.id.java1);
    java2=(LinearLayout)findViewById(R.id.java2);
    java3=(LinearLayout)findViewById(R.id.java3);
    DisplayMetrics ds=new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(ds);
    int height=ds.heightPixels;
    Log.d(TAG,""+height);

    java1.getLayoutParams().height=height/4;
    java2.getLayoutParams().height=height/2;
    java3.getLayoutParams().height=height/4;
于 2017-06-12T08:16:10.497 回答