Правая кнопка выравнивания в горизонтальном LinearLayout
Если вы посмотрите на прикрепленные изображения. Мне нужно, чтобы моя кнопка была выровнена по правому краю, но по какой-то причине она не работает с "gravity:right"...

вот мой код для этого макета:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="35dp">
<TextView
android:id="@+id/lblExpenseCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:textColor="#404040"
android:layout_marginLeft="10dp"
android:textSize="20sp"
android:layout_marginTop="9dp" />
<Button
android:id="@+id/btnAddExpense"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:background="@drawable/stitch_button"
android:layout_marginLeft="10dp"
android:text="@string/add"
android:layout_gravity="right"
android:layout_marginRight="15dp" />
</LinearLayout>
почему не работает?!
15 ответов:
использовать следующий код
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="35dp" android:orientation="horizontal" > <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="9dp" android:text="@string/cancel" android:textColor="#404040" android:textSize="20sp" /> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:layout_alignParentRight="true" android:layout_marginLeft="10dp" android:layout_marginRight="15dp" android:background="@drawable/stitch_button" android:text="@string/add" /> </RelativeLayout>
один
LinearLayoutрешение. Только добавление простого вида интервала:
(никто, казалось, не упоминал об этом, только более сложные многоуровневые решения.)<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp" /> <!------------------------- ADDED SPACER VIEW --------------------> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <!------------------------- /ADDED SPACER VIEW --------------------> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="right" android:layout_marginRight="15dp" /> </LinearLayout>обратите внимание на" выделенный " вид, я больше ничего не изменял. Высота=0 гарантирует, что он не виден. Width=0 - это потому, что ширина определяется
LinearLayoutна основе веса=1. Это означает, что вид прокладки будет растягиваться как можно больше в направлении (ориентации) объекта.LinearLayout.отметим, что вы должны использовать
android.widget.Spaceилиandroid.support.v4.widget.SpaceвместоViewесли ваш уровень API и/или зависимости позволяют это.Spaceвыполняет работу более дешевым способом, потому что он только измеряет и не пытается рисовать что-либо вродеViewделает; это также более выразительно передает намерение.
Я знаю, что этот вопрос был задан некоторое время назад, но я сделал это раньше, и это позволяет больше контролировать при выравнивании элементов.Если вы посмотрите на это как на веб-программирование, это поможет. Вы просто гнездо другое
LinearLayoutэто будет содержать вашу кнопку внутри него. Затем вы можете изменить гравитацию макета кнопки и заставить ее идти вправо, покаTextViewпо-прежнему слева.попробуйте этот код:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right" android:orientation="horizontal" > <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="right" android:layout_marginRight="15dp"/> </LinearLayout>возможно, Вам придется играть с балластом на вложенный макет, чтобы он действовал так, как вы хотите.
реальное решение для этого случая:
android:layout_weight="1"для TextView, и ваша кнопка двигаться вправо!
попробуй этот
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_gravity="right" android:layout_height="wrap_content" android:orientation="horizontal" > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="9dp" android:text="cancel" android:textColor="#ffff0000" android:textSize="20sp" /> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:layout_alignParentRight="true" android:layout_marginLeft="10dp" android:layout_marginRight="15dp" android:textColor="#ff0000ff" android:text="add" /> </RelativeLayout> </LinearLayout>
Как упоминалось пару раз ранее: для переключения с LinearLayout на RelativeLayout работает, но вы также можете решить проблему, а не избегать ее. Используйте инструменты, которые предоставляет LinearLayout: дайте TextView вес=1 (см. код ниже), вес для вашей кнопки должен оставаться 0 или нет. В этом случае TextView займет все оставшееся пространство, которое не используется для отображения содержимого вашего TextView или ButtonView и нажимает кнопку вправо.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp" **android:layout_weight="1"** /> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="right" android:layout_marginRight="15dp" /> </LinearLayout>
вам нужно добавить гравитацию в макет, а не кнопку, гравитация в настройках кнопки предназначена для текста внутри кнопки
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_gravity="right" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp"/> <Button android:id="@+id/btnAddExpense" android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="right" android:layout_marginRight="15dp"/> </LinearLayout>Это решит вашу проблему
Если вы не хотите или не можете использовать RelativeLayout, вы можете обернуть кнопку в LinearLayout с ориентацией "вертикаль" и шириной "fill_parent".
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="right" android:layout_marginRight="15dp" /> </LinearLayout> </LinearLayout>это связано с тем, что если ориентация LinearLayout горизонтальна, гравитация будет влиять только на виды по вертикали. И если ориентация "вертикальная", гравитация будет влиять только на виды по горизонтали. Смотрите здесь для получения более подробной информации об объяснении ориентации/гравитации LinearLayout.
я использовал аналогичный макет с 4
TextViews. TwoTextViews должны быть выровнены по левому краю и дваTextViews должны быть выровнены вправо. Итак, вот мое решение, если вы хотите использовать .<?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:orientation="horizontal" android:baselineAligned="false" android:padding="10dp" > <LinearLayout android:layout_width="0dip" android:layout_weight="0.50" android:layout_height="match_parent" android:gravity="left" android:orientation="horizontal" > <TextView android:id="@+id/textview_fragment_mtfstatus_level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/level" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textview_fragment_mtfstatus_level_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout> <LinearLayout android:layout_width="0dip" android:layout_weight="0.50" android:layout_height="match_parent" android:gravity="right" android:orientation="horizontal" > <TextView android:id="@+id/textview_fragment_mtfstatus_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/time" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textview_fragment_mtfstatus_time_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout> </LinearLayout>
вы можете использовать RelativeLayout или установить gravity="right" на родительском макете вашей кнопки.
Я знаю, что это старый, но вот еще один в линейной компоновке будет:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="35dp"> <TextView android:id="@+id/lblExpenseCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" android:textColor="#404040" android:layout_marginLeft="10dp" android:textSize="20sp" android:layout_marginTop="9dp" /> <Button android:id="@+id/btnAddExpense" android:layout_width="wrap_content" android:layout_height="45dp" android:background="@drawable/stitch_button" android:layout_marginLeft="10dp" android:text="@string/add" android:layout_gravity="center_vertical|bottom|right|top" android:layout_marginRight="15dp" />обратите внимание на layout_gravity в отличие от просто гравитации.
вы должны использовать Relativelayout вместо Linearlayout в качестве основного макета. Если вы используете Relativelayout в качестве основного, то легко обрабатывать кнопку на правой стороне, потому что относительная компоновка обеспечивает нам alignParent справа,слева, сверху и снизу.
просто добавить android: гравитация= "право" эта строка родительского макета это будет работать.
<LinearLayout android:id="@+id/withdrawbuttonContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/colorPrimary" android:orientation="horizontal" **android:gravity="right"** android:weightSum="5" android:visibility="visible"> <Button android:id="@+id/bt_withDraw" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/BTN_ADD" app:delay="1500" /> <Button android:id="@+id/btn_orderdetail_amend" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/BTN_CANCEL" app:delay="1500" /> </LinearLayout>
Comments