Ich habe hier bei SO zahlreiche ähnliche Fragen durchgesehen, aber nichts hilft. Ich habe eine Hierarchie verschiedener verschachtelter Layouts, die alle haben android:layout_width="fill_parent"
, und das innerste Layout hat android:layout_width="wrap_content
- ich muss es in der Mitte (horizontal) ausrichten. Wie mache ich das?
Update :: Ich habe die Ursache des Problems gefunden. Wenn ich das innere LinearLayout in RelativeLayout mit eingefügt habe android:layout_width="fill_parent"
, wird der Inhalt trotzdem umbrochen . Die TableRow füllt jedoch wirklich den Bildschirm.
<?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>
quelle
android:layout_gravity="center"
für das Layout, das die TextViews enthält - hilft nicht, es ist immer noch links ausgerichtet. Es wurde auch versucht, die Breite dieses Layouts aufwrap
und einzustellenfill
- kein Unterschied.Bitte versuchen Sie dies in Ihrem linearen Layout
android:layout_centerHorizontal="true" android:layout_centerVertical="true"
quelle
<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>
Ziehen Sie in Betracht, relativeLayout über LinearLayout zu verpacken.
android:layout_centerHorizontal="true"
positioniert die Ansichtsmitte horizontal.quelle
LinearLayout
,layout_width
welche sein solltenwrap_content
und welche nichtmatch_parent
. Die gleiche Logik gilt für die vertikale AusrichtungHinzufügen
layout_gravity="center"
oder"center_horizontal"
zum übergeordneten Layout.Nebenbei bemerkt, Ihr
LinearLayout
InneresTableRow
scheint unnötig zu sein, da aTableRow
bereits eine Horizontale istLinearLayout
.quelle
Versuche dies:
<?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>
quelle
Das hat bei mir funktioniert .. leere Ansicht hinzufügen ..
<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>
quelle
Try
<TableRow android:gravity="center_horizontal">
Dies zentriert das innere LinearLayout innerhalb des Tablerows.quelle
Ich habe die gleiche Situation beim Entwerfen einer benutzerdefinierten Benachrichtigung erlebt. Ich habe versucht, mit dem folgenden Attribut mit true gesetzt.
android:layout_centerInParent.
quelle
das hat bei mir funktioniert.
<LinearLayout> . . . android:gravity="center" . .> <TextView android:layout_gravity = "center" /> <Button android:layout_gravity="center" /> </LinearLayout>
Sie entwerfen also das lineare Layout so, dass der gesamte Inhalt (Textansicht und Schaltfläche) in der Mitte platziert wird. Anschließend werden die Textansicht und die Schaltfläche relativ zur Mitte des linearen Layouts platziert
quelle
@jksschneider Erklärung ist fast richtig. Stellen Sie sicher, dass Sie kein
gravity
übergeordnetes Layout festgelegt haben, und stellen Sie dannlayout_gravity="center"
Ihre Ansicht oder Ihr Layout ein.quelle
Ich habe dies bei der Arbeit mit verschachtelten RelativeLayouts erlebt. Meine Lösung war einfach, aber es ist ein kleines Problem, das es wert ist, beachtet zu werden.
Mein Layout wurde definiert mit ...
android:layout_height="fill_parent" android:layout_below="@id/someLayout android:gravity="center"
... aber ich dachte nicht, dass das Layout darunter darüber gelegt wurde. Alles in diesem Layout wurde nach unten verschoben und nicht zentriert. Hinzufügen ...
android:layout_above="@id/bottomLayout"
... mein Problem behoben.
quelle
Für ImageView oder andere Ansichten, deren Layout-Schwerkraft oder Schwerkraft nicht vorhanden ist, verwenden Sie:
android:layout_centerInParent="true"
im Kind (ich hatte als Kind ein relatives Layout mit einem ImageView).quelle
Das Problem ist, dass die Schwerkraft der Wurzel (das Hauptlayout, in dem Sie die anderen Elemente speichern) nicht festgelegt ist. Wenn Sie es ändern zu zentrieren Schwerkraft die anderen Elemente müssen gut funktionieren.
quelle
Unten finden Sie Code, mit dem Sie Ihr Linearlayout unten und seinen Inhalt in der Mitte platzieren können. Sie müssen RelativeLayout verwenden, um das Layout unten festzulegen.
<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>
quelle