Android Макет Выравнивание По Правому Краю
У меня есть следующий макет на месте
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="13">
<LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/back" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/back" android:padding="10dip" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/forward" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/forward" android:padding="10dip" />
</LinearLayout>
</LinearLayout>
<RelativeLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" >
<ImageButton android:background="@null" android:id="@+id/special" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/barcode" android:padding="10dip" android:layout_gravity="right"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
для целей этого вопроса меня беспокоит только нижняя половина макета. Сейчас он содержит 3 imagebuttons. Первые 2, я хочу рядом друг с другом и выровнены по левому краю. Третий, я хочу быть выровнен по правой стороне.
как есть, первые 2 кнопки находятся там, где я хочу, чтобы они были, но 3-й упрямо остается выровненным по левому краю. Как бы я сделал это правильно выровненным.
5 ответов:
макет крайне неэффективен и раздут. Вам не нужно так много
LinearLayout
ы. На самом деле вам не нужныLinearLayout
на всех.использовать только один
RelativeLayout
. Вроде этого.<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageButton android:background="@null" android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/back" android:padding="10dip" android:layout_alignParentLeft="true"/> <ImageButton android:background="@null" android:id="@+id/forward" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/forward" android:padding="10dip" android:layout_toRightOf="@id/back"/> <ImageButton android:background="@null" android:id="@+id/special" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/barcode" android:padding="10dip" android:layout_alignParentRight="true"/> </RelativeLayout>
Это пример RelativeLayout:
RelativeLayout relativeLayout=(RelativeLayout)vi.findViewById(R.id.RelativeLayoutLeft); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams(); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); relativeLayout.setLayoutParams(params);
С другим видом макета (пример LinearLayout) вы просто должны изменить RelativeLayout на LinearLayout.
если вы хотите использовать LinearLayout, вы можете сделать выравнивание с
layout_weight
СSpace
элемент.например, следующие места расположения
textView
иtextView2
иtextView3
будет выровнен по правому краю<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/textView" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/textView2" /> <Space android:layout_width="0dp" android:layout_weight="1" android:layout_height="20dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/textView3" /> </LinearLayout>
вы можете достичь того же эффекта без
Space
Если вы хотитеlayout_weight
доtextView2
. Просто мне нравятся вещи более разделенные, плюс чтобы продемонстрироватьSpace
элемент.<TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/textView2" />
отметим, что вы должен (не должен, хотя) установить
layout_width
явно, поскольку он будет пересчитан в соответствии с его весом в любом случае (так же, как вы должны установить высоту в элементах вертикалиLinearLayout
). Другие советы по производительности макета см. Android Макет Трюки
для поддержки старой версии пространство может быть заменено на вид, как показано ниже. Добавить этот вид между После покинуло большинство компонентов и до правого компонента. Этот вид с весом=1 растянется и заполнит пространство
<View android:layout_width="0dp" android:layout_height="20dp" android:layout_weight="1" />
полный пример кода приведен здесь. Он имеет 4 компоненты. Две стрелки будут на правой и левой стороне. Текст и прядильщик будут посередине.
<ImageButton android:id="@+id/btnGenesis" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center|center_vertical" android:layout_marginBottom="2dp" android:layout_marginLeft="0dp" android:layout_marginTop="2dp" android:background="@null" android:gravity="left" android:src="@drawable/prev" /> <View android:layout_width="0dp" android:layout_height="20dp" android:layout_weight="1" /> <TextView android:id="@+id/lblVerseHeading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center" android:textSize="25sp" /> <Spinner android:id="@+id/spinnerVerses" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:gravity="center" android:textSize="25sp" /> <View android:layout_width="0dp" android:layout_height="20dp" android:layout_weight="1" /> <ImageButton android:id="@+id/btnExodus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center|center_vertical" android:layout_marginBottom="2dp" android:layout_marginLeft="0dp" android:layout_marginTop="2dp" android:background="@null" android:gravity="right" android:src="@drawable/next" /> </LinearLayout>