webentwicklung-frage-antwort-db.com.de

Wie richtet man LinearLayout in der Mitte des übergeordneten Elements aus?

Ich habe bei SO zahlreiche ähnliche Fragen durchgesehen, aber nichts hilft ... Ich habe eine Hierarchie verschiedener verschachtelter Layouts, alle haben Android:layout_width="fill_parent" und das innerste Layout hat Android:layout_width="wrap_content - ich muss es in der Mitte ausrichten horizontal). Wie mache ich das?

Update: : Ich habe die Ursache des Problems gefunden. Wenn ich das innere LinearLayout mit Android:layout_width="fill_parent" in RelativeLayout stecke, wird der Inhalt trotzdem umbrochen. Die TableRow füllt jedoch wirklich den Bildschirm aus.

<?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>
69
Violet Giraffe

Diese beiden Attribute werden häufig verwirrt:

  • Android:gravity legt die Schwere des Inhalts der View fest, auf der es verwendet wird
  • Android:layout_gravity legt die Schwere der Ansicht oder des __Layout relativ zum übergeordneten fest.

Setzen Sie entweder Android:gravity="center" auf das übergeordnete Element oder Android:layout_gravity="center" auf das LinearLayout selbst.

Ich habe mich schon einige Male dabei erwischt, wie ich sie vermischt und mich gefragt habe, warum die Dinge nicht richtig zentriert waren ...

199
jkschneider

Bitte versuchen Sie dies in Ihrem linearen Layout 

Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
16
Lakshmanan
<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>

erwägen Sie, relativesLayout über linearesLayout zu wickeln. Android:layout_centerHorizontal="true" positioniert die Ansichtsmitte horizontal.

9
Yashwanth Kumar

fügen Sie dem übergeordneten Layout layout_gravity="center" oder "center_horizontal" hinzu.

Nebenbei bemerkt scheint Ihre LinearLayout in Ihrer TableRow nicht notwendig zu sein, da eine TableRow bereits eine horizontale LinearLayout ist.

5
Emmanuel Sys

Das hat für mich 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>
3
gitesh devhane

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>
3
Hiral

Try <TableRow Android:gravity="center_horizontal"> Dies zentriert das innere LinearLayout innerhalb des Tablers.

2
triggs

Ich war beim Entwerfen von benutzerdefinierten Benachrichtigungen mit der gleichen Situation konfrontiert. Ich habe es mit folgendem Attribut mit true versucht.

 Android:layout_centerInParent.
2
Karthikeyan Ve

Ich habe dies bei der Arbeit mit verschachtelten RelativeLayouts erlebt. Meine Lösung erwies sich als einfach, aber es lohnt sich, sich darüber im Klaren zu sein.

Mein Layout wurde definiert mit ...

Android:layout_height="fill_parent"
Android:layout_below="@id/someLayout
Android:gravity="center"

... Ich dachte jedoch 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.

1
Crash5998

das hat für mich 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 (TextView und Button) in der Mitte platziert wird. Anschließend werden TextView und Button relativ zur Mitte des linearen Layouts positioniert

1
Prab

@jksschneider Exploration ist fast richtig. Stellen Sie sicher, dass Sie keine gravity für übergeordnetes Layout festgelegt haben, und legen Sie dann layout_gravity="center" für Ihre Ansicht oder Ihr Layout fest.

1
Pawan

für ImageView oder andere Ansichten, deren Layout-Schwerkraft oder Schwerkraft nicht vorhanden ist, verwenden Sie: Android:layout_centerInParent="true" im Kind (Ich hatte ein relatives Layout mit einer ImageView als Kind).

0
bastami82

Das Problem ist, dass die Schwerkraft von root (das Hauptlayout, in dem Sie die anderen Elemente speichern) nicht festgelegt ist. Wenn Sie es in center ändern, muss die Schwerkraft der anderen Elemente gut funktionieren. 

0
Marin Karadzhov

Nachfolgend finden Sie den Code, mit dem Sie Ihr Linearlayout nach unten und den Inhalt in die Mitte stellen 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>
0
Kalpesh Patil