2014-01-20 4 views
11

У меня есть макет, как показано ниже. Теперь я не хочу устанавливать ширину относительного макета на фиксированный 240 дп. Я хочу установить ширину относительного макета на 1/3 ширины экрана. Возможно ли это сделать в XML-файле. Если это невозможно, как я могу добиться этого с помощью java-кода?Установите ширину релятивирования 1/3 ширины экрана?

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/fullscreen" 
     style="@style/translucent"> 
      <RelativeLayout 
      android:layout_width="240dp" 
      android:layout_height="fill_parent" 
      android:layout_gravity="right" 
      android:gravity="center" 
      android:background="#88000000" 
      android:id="@+id/sidebar"> 

      </RelativeLayout> 

    </FrameLayout> 

ответ

20

weightsum="3" у родителя и layout_weight=1 у ребенка. Take a look a this reference

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/fullscreen" 
    style="@style/translucent" 
    android:orientation="horizontal" 
    android:weightSum="3"> 

    <RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_gravity="right" 
     android:gravity="center" 
     android:background="#88000000" 
     android:id="@+id/sidebar" 
     android:layout_weight="1" 
     > 

    </RelativeLayout> 

    <!-- other views, with a total layout_weight of 2 --> 

</LinearLayout> 
+0

Что делать, если LinearLayout имеет только один ребенок, который является релевантным. Могу ли я установить layout_weight = 1 в relativelayout? –

+0

Вы можете попробовать, и вы узнаете сами! :-) любом случае, помните, что вы всегда можете использовать фиктивное представление для этих целей, что-то вроде '<Посмотреть андроид: layout_width = "0dp" андроида: layout_height = "match_parent" андроид: layout_weight = "2"> ', который ничего не покажет, но будет использовать дополнительное пространство –

2

Вы должны использовать LinearLayout, чтобы получить ширину зрения, чтобы быть треть ее parentview.

Что-то вроде:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:background="#88000000"> 
    </RelativeLayout> 
    <ViewGroup 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="2"> 
    </ViewGroup> 
</LinearLayout> 

Ключа битого отношения layout_weights. documentation довольно хорошо.

1

LinearLayout с android:layout_orientation="horizontal" является то, что вы хотите, вместе с весами.

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

    <RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     ...all your stuff... /> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="2" /> 


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