2012-04-23 3 views
0

안녕하세요, 저는 Android 레이아웃 웨이트 속성을 뒤범벅하려고합니다. "3 자 레이아웃"으로 세로 레이아웃을 원합니다. 첫 번째 레이아웃에는 공간의 25 %, 두 번째 50 % 및 마지막 25 %가 소요됩니다. 마지막 레이아웃에 추가하려고하면 모든 것이 제대로 작동하지 않습니다. 이 레이아웃들 각각의 무게는 무엇이되어야합니까?android layout weight %

나는 무게가 단지 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> 
+0

포스트 레이아웃 코드 그래서 우리는 당신이 예 – dymmeh

+0

를 무슨 짓을했는지 볼 수 있습니다. 문제는 높이 속성입니다. 그들은 모두 '0dp'이어야합니다. – DeeV

답변

2

android:width 속성이 모든 자식 레이아웃에 0dp로 설정되어 있는지 확인 한 다음 지정된 weight이 있는지 확인하십시오. 더 자세한 설명이 필요하면 코드를 붙여 넣어야합니다.

0

우선, 무게는 LinearLayouts 또는 LinearLayout에서 파생 된 레이아웃에만 적용 할 수 있습니다.특성이 어떤 값이든간에의 백분율이어야합니다. 부모의 weightSum=1LinearLayout으로 설정하면 첫 번째 자녀의 비율은 0.25, 두 번째 자녀는 0.5, 세 번째 자녀는 .25이어야합니다.

편집 : javram이 말했다 :. LinearLayout이 가로 방향인지 또는 세로 방향인지 각각에 따라 너비 또는 높이를 0dp으로 설정해야합니다.

편집 2 : 또한 실제로는 weightSum을 지정하지 않아도됩니다. 도움이 되긴하지만 LinearLayout은 아이들이 자신의 체중이 어떻게 다른지에 따라 전적으로 아이들을 나눌 것이라고 믿습니다. 자녀 1의 체중이 자녀 2의 체중의 두 배인 경우, 자녀 2는 화면에서 두 자녀 1이됩니다. 따라서 귀하의 경우에는 어린이 1이 동일한 무게를 지니는 반면, 어린이 2는 다른 2 개의 값을 두 배로 확보해야합니다.

+0

+1 DeeV. 그는 펀치에 나를 때렸다. – javram

0

덜 복잡한 레이아웃 트리를 사용하여이 결과를 얻는 또 다른 방법이 있습니다. Android 용 Percent Support LibraryPercentRelativeLayout을 사용할 수 있습니다. 이 라이브러리를 프로젝트로 가져오고 다음 코드를 확인하십시오.

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