我想了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>
尝试使用此代码。
<?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>
确保android:width
属性设置为0dp所有子布局,并确保你有一个weight
规定。 如果您想更详细的解释,你将需要粘贴代码。
还有少用复杂的布局树实现这个结果的另一种方式。 您可以使用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>
那么,首先,重量仅可应用于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具有其他两个双重价值。
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;