Jeśli spojrzysz na załączony obraz. Potrzebuję, aby mój przycisk był wyrównany do prawej strony, ale z jakiegoś powodu nie działa z `` grawitacją: dobrze '' ...
Oto mój kod dla tego układu:
<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>
Dlaczego nie działa ?!
android
android-layout
ROMANIA_engineer
źródło
źródło
Odpowiedzi:
Użyj do tego poniższego kodu
<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>
źródło
Jedno
LinearLayout
rozwiązanie. Dodanie tylko prostego widoku odstępów:(Wydawało się, że nikt nie wspomniał o tym, tylko bardziej skomplikowane rozwiązania z wieloma układami).
<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>
Zwróć uwagę na „podświetlony” widok, niczego innego nie modyfikowałem. Wysokość = 0 zapewnia, że nie jest widoczna. Szerokość = 0 wynika z tego, że szerokość jest określana na
LinearLayout
podstawie wagi = 1. Oznacza to, że widok elementu dystansowego będzie maksymalnie rozciągany w kierunku (orientacji)LinearLayout
.Zauważ, że powinieneś użyć
android.widget.Space
lubandroid.support.v4.widget.Space
zamiast,View
jeśli twój poziom API i / lub zależności na to pozwalają.Space
wykonuje pracę w tańszy sposób, bo tylko mierzy i nie próbuje narysować czegoś takiego jakView
robi; jest też bardziej wyrazisty i przekazuje intencję.źródło
layout_weight="1"
nadaje mu dynamiczny rozmiar, co oznacza „bądź tak szeroki, jak tylko możesz” (ponieważLinearLayout
jesthorizontal
). width =0dp
służy tylko do wydajności , w rzeczywistości nie będzie miała 0 szerokości. Mam wrażenie, że nawet nie wypróbowałeś kodu ...Prawdziwe rozwiązanie w tym przypadku:
android:layout_weight="1"
dla TextView, a przycisk przesunie się w prawo!źródło
Wiem, że to pytanie zostało zadane jakiś czas temu, ale robiłem to już wcześniej i pozwala to na większą kontrolę podczas wyrównywania elementów. Jeśli spojrzysz na to jak na programowanie internetowe, to pomaga. Po prostu zagnieżdżasz kolejny,
LinearLayout
który będzie zawierał twój przycisk w środku. Następnie możesz zmienić wagę układu przycisku i skierować go w prawo, podczas gdyTextView
nadal znajduje się on po lewej stronie.Wypróbuj ten kod:
<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>
Być może będziesz musiał bawić się dopełnieniem w zagnieżdżonym układzie, aby działał tak, jak chcesz.
źródło
Spróbuj tego
<?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>
źródło
Jak wspomniano kilka razy wcześniej: Przełączanie się z LinearLayout na RelativeLayout działa, ale możesz też rozwiązać problem zamiast go unikać. Użyj narzędzi, które zapewnia LinearLayout: Nadaj TextView wagę = 1 (patrz kod poniżej), waga twojego przycisku powinna pozostać 0 lub żadna. W tym przypadku TextView zajmie całą pozostałą przestrzeń, która nie jest używana do wyświetlenia zawartości Twojego TextView lub ButtonView, i przesunie przycisk w prawo.
<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>
źródło
RelativeLayout
powodu problemów z pamięcią, ponieważRelativeLayout
zużywa znacznie więcej pamięci niżLinearLayout
Musisz dodać grawitację do układu, a nie do przycisku, grawitacja w ustawieniach przycisku dotyczy tekstu wewnątrz przycisku
<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">
źródło
<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>
To rozwiąże twój problem
źródło
Po prostu dodaj android: gravity = "right", ten układ nadrzędny linii to zadziała.
<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>
źródło
Jeśli nie chcesz lub nie możesz użyć RelativeLayout, możesz zawinąć przycisk w LinearLayout z orientacją „vertical” i szerokością „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>
Dzieje się tak, ponieważ jeśli orientacja LinearLayout jest pozioma, grawitacja wpłynie tylko na widoki w pionie. A jeśli orientacja jest „pionowa”, grawitacja wpłynie tylko na widoki w poziomie. Zobacz tutaj, aby uzyskać więcej szczegółów na temat wyjaśnienia orientacji / grawitacji LinearLayout.
źródło
Użyłem podobnego układu z 4
TextView
s. DwaTextView
s powinny być wyrównane do lewej, a dwaTextView
do prawej. Więc oto moje rozwiązanie, jeśli chcesz używaćLinearLayouts
sam.<?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>
źródło
Możesz użyć RelativeLayout lub ustawić gravity = "right" w układzie nadrzędnym swojego Button.
źródło
Wiem, że to jest stare, ale tutaj jest inny w układzie liniowym:
<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" />
Zwróć uwagę na layout_gravity, a nie tylko na grawitację.
źródło
center_vertical|bottom|top
? Dla mnie wyglądają jak ekskluzywne grawitacje wyrównania.Jako główny układ należy użyć układu relatywnego zamiast układu liniowego. Jeśli używasz układu Relativelayout jako głównego, z łatwością obsłuż przycisk po prawej stronie, ponieważ układ względny zapewnia nam alignParent right, left, top and bottom.
źródło
Użyj szerokości układu w przycisku, np. Android: layout_width = "75dp"
źródło