2012-04-11 3 views
13

У меня есть макет с тремя элементами и его ориентация «горизонтальная»андроид weightSum не работают должным образом

Я хочу, чтобы установить размер, что каждый элемент занимает в моем макете.

Первый элемент должен занимать 40% от общей площади, тогда второй элемент должен занимать 5%, а третий должен занимать оставшееся 55% пространства.

Мой макет выглядеть следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 


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

    <TextView 
     android:id="@+id/outletname" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="40" 
     android:text="@string/outlet_name2" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="5" 
     android:text=": " /> 

    <TextView 
     android:id="@+id/outletnamevalue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="55" 
     android:text="abcdefttt" /> 
</LinearLayout> 
</LinearLayout> 

текст в «TextView» будет динамически изменяться, поэтому я хочу, чтобы сохранить постоянное пространство для элементов, независимо от содержания в представлениях ...

ответ

43

В для того, чтобы сделать вес эффективным, вы должны также необходимо установить ширину ваших TextViews к 0dp.

android:layout_width="0dp" 
+10

чтобы завершить ответ, нужно понимать, что вес относится только к/остающегося/пространство, то есть пространство, оставленное раз был применен layout_width значение. – njzk2

+0

это сделал мой день: D для сколько лет ... LOL. так что это единственный ответ на проблему. UPVOTEEEEEEE – jace

0

Я использую эту формулу:

layout_weight=(weightSum-PercentageYouWant*weightSum)/(TotalElements-1) 

первый элемент должен принять 40% от общего пространства, то второй элемент должен занимать 5%, а третий должен занимать оставшиеся 55% пространства.

первый элемент:

(100-0.4*100)/(3-1)="30" 

второй элемент:

(100-0.05*100)/(3-1)="47.5" 

третий элемент:

(100-0.55*100)/(3-1)="22.5" 

так 40% + 5% + 55% = 100%

layout_weight="30" + layout_weight="47.5" + layout_weight="22.5" = weightSum="100" 

вот как я это понимаю.

вот пример (кнопки только для графической ссылки)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="120" > 

    <!-- WeightSum=120 and I will add 4 elements, so TotalElements=4 --> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="36" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 10%, so (120-10%*120)/(4-1)=36 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="10%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="32" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 20%, so (120-20%*120)/(4-1)=32 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="20%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="28" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 30%, so (120-30%*120)/(4-1)=28 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="30%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="24" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 40%, so (120-40%*120)/(4-1)=24 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="40%" /> 
    </LinearLayout> 

</LinearLayout> 
Смежные вопросы