2015-09-26 1 views
0

Я пытаюсь достичь следующую структуру для CardView:Как достичь LinearLayout с фиксированной процентной шириной?

What I want

Каждый из них отличается CardView

Я хотел бы каждый CardView иметь один и тот же «столбцы» ширину. Я мало знаю о вес собственности, и я думаю, что я использую его неправильно. Насколько я читал, весовое свойство будет указывать «приоритет» элементов на свободное пространство. Я попытался это решение:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="100dp" 
android:layout_marginBottom="2dp" 
android:layout_marginTop="2dp" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
android:id="@+id/main_flat_item" 
> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <com.example.myapp.VerticalTextView 
     android:text="CODE" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="3dp" 
     android:background="@color/td_main_blue" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:textColor="@color/white" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="Title" 
     android:textSize="20sp" 
     android:padding="5dp" 
     android:layout_weight="0.5" 
     /> 

    <View 
     android:layout_width="1dp" 
     android:layout_height="70dp" 
     android:layout_gravity="center" 
     android:background="@color/grayE" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:layout_weight="0.3"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Taxa compra" 
       android:textSize="12sp" 
       android:textColor="@color/grayB"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Taxa Compra" 
       android:textSize="16sp" 
       android:textColor="@color/td_green"/> 

     </LinearLayout> 


     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Taxa venda" 
       android:textSize="12sp" 
       android:textColor="@color/grayB"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Taxa Venda" 
       android:textSize="16sp" 
       android:textColor="@color/td_red" /> 

     </LinearLayout> 

    </LinearLayout> 

    <View 
     android:layout_width="1dp" 
     android:layout_height="70dp" 
     android:layout_gravity="center" 
     android:background="@color/grayE" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.2" 
     android:layout_gravity="center" 
     android:gravity="center"> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:button="@drawable/star_checkbox" /> 

    </LinearLayout> 

</LinearLayout> 


</android.support.v7.widget.CardView> 

Но Altough я установить некоторые свойства веса я в конечном итоге с вещами, как:

Result example :(

Итак:

  • Должен ли я установить вес для всех моих детей внутри LinearLayout? Что мне делать с «фиксированными» элементами ширины (например, с левой панелью и разделителем строк).
    • Есть ли лучший способ сделать это?

Спасибо заранее.

+0

Ознакомьтесь с новой библиотекой поддержки процентов: https://developer.android.com/tools/support-library/features.html#percent – stkent

ответ

2

Макеты компоновки работают как отношение всех элементов в блоке. Например, если у вас было три textviews в linearlayout с весами 1, 2 и 1, второй textview был бы вдвое больше, чем два других, или занимал бы 50% доступного пространства. Общая сумма не имеет значения, просто соотношение между числами, поэтому в приведенном выше примере я мог бы использовать 0,5: 1: 0,5 или 100: 200: 100, и это получилось бы так же.

Так что в вашем коде, в наружном LinearLayout у вас есть только три элемента с весами: Первый TextView и два вложенных LinearLayout с, 0,5, 0,3 и 0,2 соответственно. Таким образом, Android предоставит пространство всем элементам фиксированной ширины, а затем оставшегося пространства, TextView получит 5/10, а LinearLayout s получит 3/10 и 2/10.

Кроме того, вес лучше всего работает, если предмет с весом имеет размер 0dp в направлении растяжения. Если вы используете Android Studio, он должен был предупредить вас об этом.

+0

Спасибо. Android-студия не предупредила меня об 0dp. Я читал, что речь шла только о производительности, но изменение его на 0dp фактически заставило его работать. Большое спасибо! : D –