Android установил layout_weight, но пропустил последнее дополнение?

#android #android-layout

#Android #android-layout

Вопрос:

Я хотел бы создать 3 одинаковых элемента макета в Android.

Это легко достижимо с layout_weight атрибутами, но как я могу пропустить последнюю часть поля?

введите описание изображения здесь

Образец макета:

 <LinearLayout 
    android:layout_gravity="center_vertical" 
    android:orientation="vertical" 
    android:layout_width="0.0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1">

    <ImageView 
        android:layout_width="48.0dip" 
        android:layout_height="40.0dip" />

    <TextView 
        android:gravity="center" 
        android:layout_gravity="center_horizontal" 
        android:layout_width="wrap_content"                         
        android:layout_height="wrap_content" 
        android:maxLines="1" 
        android:includeFontPadding="false" />

</LinearLayout>

<LinearLayout 
    android:layout_gravity="center_vertical" 
    android:orientation="vertical" 
    android:layout_width="0.0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1">

    <ImageView 
        android:layout_width="48.0dip" 
        android:layout_height="40.0dip" />

    <TextView 
        android:gravity="center" 
        android:layout_gravity="center_horizontal" 
        android:layout_width="wrap_content"                         
        android:layout_height="wrap_content" 
        android:maxLines="1" 
        android:includeFontPadding="false" />

</LinearLayout>

<LinearLayout 
    android:layout_gravity="center_vertical" 
    android:orientation="vertical" 
    android:layout_width="0.0dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1">

    <ImageView 
        android:layout_width="48.0dip" 
        android:layout_height="40.0dip" />

    <TextView 
        android:gravity="center" 
        android:layout_gravity="center_horizontal" 
        android:layout_width="wrap_content"                         
        android:layout_height="wrap_content" 
        android:maxLines="1" 
        android:includeFontPadding="false" />

</LinearLayout>
  

Пожалуйста, обратите внимание, что ImageView и TextView должны располагаться по центру друг относительно друга даже в последнем столбце.

Также обратите внимание: ConstraintLayout недоступен (бизнес-требование).

Комментарии:

1. Где корневой макет?

2. вместо этого используйте contraintlayout

3. В последнем LinearLayout измените layout_gravity с android:layout_gravity="center_vertical" на android:layout_gravity="end" . Или переключитесь на ConstrainyLayout и используйте ограничения.

4. Первое предложение не работает, второе невозможно из-за бизнес-требований. В любом случае спасибо.

Ответ №1:

Можете ли вы попробовать это?

 <LinearLayout
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:layout_width="0.0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1">

    <ImageView
        android:layout_gravity="center_horizontal"
        android:layout_width="48.0dip"
        android:layout_height="40.0dip" />

    <TextView
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:includeFontPadding="false" />

</LinearLayout>

<LinearLayout
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:layout_width="0.0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1">

    <ImageView
        android:layout_gravity="center_horizontal"
        android:layout_width="48.0dip"
        android:layout_height="40.0dip" />

    <TextView
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:includeFontPadding="false" />

</LinearLayout>

<LinearLayout
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:layout_width="0.0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1">

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

        <ImageView
            android:layout_gravity="center_horizontal"
            android:layout_width="48.0dip"
            android:layout_height="40.0dip" />

        <TextView
            android:gravity="center"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:includeFontPadding="false" />

    </LinearLayout>
    
</LinearLayout>
  

Комментарии:

1. Это близко к идеальному, но мне нужно было изменить веса на 3-3-2, и теперь кажется хорошим. Спасибо

Ответ №2:

Попробуйте это или используйте ConstraintLayout для лучшего контроля.

             <?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="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:orientation="horizontal">
            
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_weight="3"
                    android:orientation="vertical">
            
                    <ImageView
                        android:layout_width="48.0dip"
                        android:layout_height="40.0dip"
                        android:layout_gravity="center" />
            
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:gravity="center"
                        android:includeFontPadding="false"
                        android:maxLines="1"
                        android:text="test" />
            
                </LinearLayout>
            
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_weight="3"
                    android:orientation="vertical">
            
                    <ImageView
                        android:layout_width="48.0dip"
                        android:layout_height="40.0dip"
                        android:layout_gravity="center" />
            
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:gravity="center"
                        android:includeFontPadding="false"
                        android:maxLines="1"
                        android:text="test" />
            
                </LinearLayout>
            
            
            
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:layout_weight="1.5"
                    android:orientation="vertical">
            
                    <ImageView
                        android:layout_width="48.0dip"
                        android:layout_height="40.0dip"
                        android:layout_gravity="end" />
            
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:textAlignment="center"
                        android:gravity="center"
                        android:includeFontPadding="false"
                        android:maxLines="1"
                        android:text="test" />
            
                </LinearLayout>
            
                <View
                    android:layout_weight="2"
                    android:layout_width="1dp"
                    android:layout_height="1dp"/>
            
            </LinearLayout>
  

Комментарии:

1. Это не работает. Пожалуйста, посмотрите мой скриншот: imgur.com/a/gaRz477

2. Тогда вам нужно перефразировать свой вопрос, чего именно вы хотите достичь. Все ли в порядке с ConstraintLayout, если да, я попробую это

3. ConstraintLayout недоступен из-за бизнес-требований. Это вопрос с момента моего последнего обновления. Вы думаете, что все еще нужно больше перефразировать? Спасибо!

4. Я обновил ответ, и это все, что я мог сделать, изменив веса. В противном случае вам нужен пользовательский вид, расширяющий LinearLayout

5. Если я удалю последнее View , нежелательное правое поле исчезнет, но в этом случае метка не центрируется под ImageView. Если last View остается, создается правое поле, которое я хочу удалить в соответствии с вопросом.