Android布局权重百分比

3
我正在尝试使用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>

请发布您的布局代码,以便我们查看您所做的内容。 - dymmeh
是的。问题在于你的高度属性。它们都应该是“0dp”。 - DeeV
5个回答

5
尝试使用这段代码。
<?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>

4

请确保所有子布局的android:width属性都设置为0dp,然后确保您已指定weight。如果您想要更详细的解释,请粘贴您的代码。


3

使用更简单的布局树可以实现此结果的另一种方法。您可以在Android中使用百分比支持库中的PercentRelativeLayout。只需将此库导入您的项目,并查看以下代码:

<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>

0

首先,权重只能应用于LinearLayouts或任何从LinearLayout派生的布局。子项的权重应该是LinearLayoutweightSum属性的百分比。如果您将父LinearLayoutweightSum=1设置为,则第一个子项的百分比应为0.25,第二个子项应为0.5,第三个子项应为0.25。

编辑:像javram所说的那样。根据LinearLayout的方向,您需要将宽度或高度设置为0dp

编辑2:此外,我认为您实际上不必指定weightSum。它有帮助,但我相信LinearLayout将仅基于它们各自的权重来划分子项。如果子项1的权重是子项2的两倍,则屏幕上的子项2将是子项1的两倍。因此,在您的情况下,请确保子项1和3具有相同的权重,而子项2的值是其他两个的两倍。


-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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接