Android的布局重量%(android layout weight %)

2019-09-16 17:04发布

我想了Android布局权重属性来瞎搞。 我希望有一个垂直布局“3个个子布局”第一个将乘坐空间,第二个50%的空间,而最后25%的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>

Answer 1:

尝试使用此代码。

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


Answer 2:

确保android:width属性设置为0dp所有子布局,并确保你有一个weight规定。 如果您想更详细的解释,你将需要粘贴代码。



Answer 3:

还有少用复杂的布局树实现这个结果的另一种方式。 您可以使用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>


Answer 4:

那么,首先,重量仅可应用于LinearLayouts或从派生的任何布局LinearLayout 。 孩子们的权重应该是个什么的weightSum属性是LinearLayout 。 如果设置weightSum=1你父母LinearLayout ,那么你的第一个孩子的比例应该是1.25,第二个孩子应该是3.5,并且第三个孩子应该是0.25。

编辑:像javram说。 您需要的宽度或高度,以设定为0dp取决于是否LinearLayout分别是水平取向或垂直方向。

编辑2:另外,我不认为你有实际指定weightSum 。 它可以帮助,但我相信LinearLayout将完全分开的儿童基础上,自己各自的权重如何。 如果孩子1的重量的两倍,孩子2的重量很大,那么孩子2将是双重的孩子1在屏幕上。 因此,在你的情况下,只要确保孩子1和3具有相同的重量,同时孩子2具有其他两个双重价值。



Answer 5:

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;


文章来源: android layout weight %