#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. Если lastView
остается, создается правое поле, которое я хочу удалить в соответствии с вопросом.