2015-08-13 6 views
9

У меня есть макет, который я хочу разбить на 2 вида, используя layout_weight (1: 2). Но, я хочу, чтобы левый вид имел ширину не менее 400dp.Комбинация layout_weight с minWidth

Например, если левое изображение получает ширину 420dp с использованием веса, то оставьте его, но если оно меньше 400dp, то пусть оно будет 400dp и даст другому виду все остальное.

Это макет, который я пробовал и не работал для меня.

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

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:minWidth="400dp" 
      android:background="@android:color/holo_blue_bright"/> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="2" 
      android:background="@android:color/holo_green_light"/> 

    </LinearLayout> 

Пожалуйста, помогите, Спасибо!

+0

Насколько я вижу, вам придется делать это программно. Но прежде я предлагаю переосмыслить ваш интерфейс. То, что вы пытаетесь сделать, кажется немного лишним. – JanithaR

ответ

-1
Try this: 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:weightSum="3" > 

    <View 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="@android:color/holo_blue_bright" 
     android:minWidth="400dp" /> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="2" 
     android:background="@android:color/holo_green_light" /> 

</LinearLayout> 
+0

Это не решило. Как weightSum должен его решить? – Yaniv

+0

Заменить андроид: layout_width = "match_parent" с android: layout_width = "wrap_content" LinearLayout .. –

+0

Сделал это, это не помогло, спасибо – Yaniv

0

Я думаю, что это то, что вам нужно:

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

    <View 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:minWidth="400dp" 
     android:background="@android:color/holo_blue_bright"/> 

    <View 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="match_parent" 
     android:background="@android:color/holo_green_light"/> 

</LinearLayout> 

В принципе, пусть первый макет взять необходимое место, но не менее чем 400dp. Второй возьмет все остальные. Как и во всех случаях, когда задействуется weight, убедитесь, что необходимое пространство (для ширины) для 2 детей меньше, чем то, что может предложить родитель, иначе у вас будут вещи вне экрана.

Примечание: Я попробовал его на макет телефона, но 400dp был выключен экран в портретном, так казалось, что первый макет принимает все пространство, поэтому, пожалуйста, убедитесь, чтобы попробовать его на устройстве с более чем 400dp в том направлении, в котором вы хотите, чтобы ваш макет охватывал :-)

+0

Извините, что не написал это в вопросе, но левое представление - динамическое макет, который должен получить размер от его родителя. Спасибо, в любом случае! – Yaniv

+0

Это ничего не меняет. Идея состоит в том, чтобы не иметь на нее веса. Неважно, действительно ли вы устанавливаете ширину через 'LayoutParams' и не устанавливаете ее на' wrap_content'. Возможно, вам нужно заменить теги 'View' на' LinearLayouts' и размещать 'Views' внутри. –

Смежные вопросы