Przejrzałem wiele podobnych pytań tutaj, w SO, ale nic nie pomaga. Mam hierarchię różnych układów zagnieżdżonych, wszystkie mają android:layout_width="fill_parent"
, a układ najbardziej wewnętrzny ma android:layout_width="wrap_content
- muszę wyrównać go na środku (w poziomie). Jak mogę to zrobić?
Aktualizacja:: Znalazłem przyczynę problemu - jeśli wstawię wewnętrzny LinearLayout do RelativeLayout za pomocą android:layout_width="fill_parent"
, nadal zawija on swoją zawartość. Jednak TableRow naprawdę wypełnia ekran.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="2"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
źródło
android:layout_gravity="center"
dla układu zawierającego TextViews - nie pomaga, nadal jest wyrównany do lewej. Próbowałem także ustawić szerokość tego układu nawrap
ifill
- bez różnicy.Spróbuj tego w swoim układzie liniowym
android:layout_centerHorizontal="true" android:layout_centerVertical="true"
źródło
<RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="horizontal" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="2" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </RelativeLayout>
rozważ zawijanie względnegoLayout do LinearLayout.
android:layout_centerHorizontal="true"
ustawi środek widoku w poziomie.źródło
LinearLayout
,layout_width
które powinny być,wrap_content
a które niematch_parent
. Ta sama logika dotyczy wyrównywania w pioniedodać
layout_gravity="center"
lub"center_horizontal"
do układu nadrzędnego.Na marginesie, twoje
LinearLayout
wnętrzeTableRow
wydaje się niepotrzebne, ponieważ aTableRow
jest już poziomeLinearLayout
.ź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_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableRow > <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_gravity="center_horizontal" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="2" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </TableRow> </TableLayout> </FrameLayout> </LinearLayout>
źródło
To zadziałało dla mnie .. dodanie pustego widoku ..
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" ads:adSize="BANNER" ads:adUnitId="@string/banner_ad_unit_id" > </com.google.android.gms.ads.AdView> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
źródło
Wypróbuj
<TableRow android:gravity="center_horizontal">
Spowoduje to wyśrodkowanie wewnętrznego układu LinearLayout w tabeli.źródło
Z taką samą sytuacją spotkałem się podczas projektowania niestandardowego powiadomienia. Próbowałem z następującym atrybutem ustawionym na true.
android:layout_centerInParent.
źródło
to działało dla mnie.
<LinearLayout> . . . android:gravity="center" . .> <TextView android:layout_gravity = "center" /> <Button android:layout_gravity="center" /> </LinearLayout>
więc projektujesz układ liniowy, aby umieścić całą jego zawartość (TextView i przycisk) w jego środku, a następnie TextView i przycisk są umieszczane względem środka układu liniowego
źródło
Wyjaśnienie @jksschneider jest prawie właściwe. Upewnij się, że nie ustawiłeś żadnego
gravity
na układ nadrzędny, a następnie ustawlayout_gravity="center"
na swój widok lub układ.źródło
Doświadczyłem tego podczas pracy z zagnieżdżonymi układami RelativeLayouts. Moje rozwiązanie okazało się proste, ale warto o tym pamiętać.
Mój układ został zdefiniowany za pomocą ...
android:layout_height="fill_parent" android:layout_below="@id/someLayout android:gravity="center"
... jednak nie sądziłem, że układ poniżej tego jest umieszczony na nim. Wszystko w tym układzie zostało przesunięte w dół zamiast do środka. Dodawanie ...
android:layout_above="@id/bottomLayout"
... naprawił mój problem.
źródło
dla ImageView lub innych widoków, których układ-grawitacja lub grawitacja nie istnieje, użyj:
android:layout_centerInParent="true"
w dziecku (miałem układ względny z ImageView jako dziecko).źródło
Problem polega na tym, że grawitacja roota (główny układ, w którym przechowujesz inne elementy) nie jest ustawiona. Jeśli zmienisz to w celu wyśrodkowania , grawitacja pozostałych elementów musi działać dobrze.
źródło
Poniżej znajduje się kod, aby umieścić układ liniowy na dole i umieścić jego zawartość w centrum. Musisz użyć RelativeLayout, aby ustawić układ na dole.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#97611F" android:gravity="center_horizontal" android:layout_alignParentBottom="true" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:text="View Saved Searches" android:textSize="15dp" android:textColor="#fff" android:gravity="center_vertical" android:visibility="visible" /> <TextView android:layout_width="30dp" android:layout_height="24dp" android:text="12" android:textSize="12dp" android:textColor="#fff" android:gravity="center_horizontal" android:padding="1dp" android:visibility="visible" /> </LinearLayout> </RelativeLayout>
źródło