Frage Unterschied zwischen Gravitation und Layout_gravity auf Android


Ich weiß, dass wir die folgenden Werte einstellen können android:gravity und android:layout_gravity Eigenschaften:

  1. center
  2. center_vertical
  3. center_horizontal, etc.

Aber ich bin verwirrt in Bezug auf diese beiden.

Was ist der Unterschied zwischen der Verwendung von android:gravity und android:layout_gravity?


1149
2017-08-14 09:28


Ursprung


Antworten:


Ihre Namen sollten Ihnen helfen:

  • android:gravity legt die Schwere der Inhalte (d. h. es ist Unteransichten) der View Es wird benutzt.
  • android:layout_gravity setzt die Schwerkraft der View oder Layout relativ zu seinem Elternteil.

Und ein Beispiel ist Hier.


1196
2017-08-14 09:31



Der Unterschied

android:layout_gravity ist der Draußen Schwerkraft der Ansicht. Gibt die Richtung an, in der die Ansicht den Rand des übergeordneten Elements berühren sollte.

android:gravity ist der Innerhalb Schwerkraft dieser Ansicht. Gibt an, in welche Richtung der Inhalt ausgerichtet werden soll.

HTML / CSS-Äquivalente

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

Einfacher Trick, der Ihnen hilft, sich zu erinnern

Nehmen layout-gravity als "Lay-Outside-Gravity".


446
2017-07-25 17:07



Innen Außen

  • gravity Ordnet den Inhalt an Innerhalb die Aussicht.
  • layaus_gravity Ordnet die Position der Ansicht an draußen von sich selbst.

Manchmal hilft es auch, ein Bild zu sehen. Das Grün und Blau sind TextViews und die anderen zwei Hintergrundfarben sind LinearLayouts.

enter image description here

Anmerkungen

  • Das layout_gravity funktioniert nicht für Ansichten in a RelativeLayout. Verwenden Sie es für Ansichten in einem LinearLayout oder FrameLayout. Sieh mein ergänzende Antwort für mehr Details.
  • Die Breite (oder Höhe) der Ansicht muss größer als der Inhalt sein. Andernfalls gravity wird keine Wirkung haben. So, wrap_content und gravity sind zusammen bedeutungslos.
  • Die Breite (oder Höhe) der Ansicht muss kleiner sein als die des übergeordneten Elements. Andernfalls layout_gravity wird keine Wirkung haben. So, match_parent und layout_gravity sind zusammen bedeutungslos.
  • Das layout_gravity=center sieht genauso aus layout_gravity=center_horizontal hier, weil sie in einem vertikalen linearen Layout sind. In diesem Fall können Sie nicht vertikal zentrieren layout_gravity=center nur horizontal zentriert.
  • Diese Antwort betrifft nur die Einstellung gravity und layout_gravity auf den Ansichten innerhalb eines Layouts. Um zu sehen, was passiert, wenn Sie den gravity des Layouts des übergeordneten Layouts selbst, überprüfen Sie die ergänzende Antwort das habe ich oben erwähnt. (Zusammenfassung: gravity funktioniert nicht gut auf a RelativeLayout aber kann mit a nützlich sein LinearLayout.)

Also denk daran, Layout_gravity arrangiert eine Ansicht in seiner Layout. Die Schwerkraft ordnet den Inhalt in der Ansicht an. 

XML

Hier ist das XML für das obige Bild als Referenz:

<?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="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

verbunden


433
2017-10-04 05:43



Kurze Antwort: verwenden android:gravity oder setGravity() um die Schwerkraft aller Kinderansichten eines Containers zu steuern; benutzen android:layout_gravity oder setLayoutParams() um die Schwerkraft einer individuellen Ansicht in einem Container zu kontrollieren.

Lange Geschichte: Um die Schwerkraft in einem linearen Layout-Container wie z LinearLayout oder RadioGroupgibt es zwei Ansätze:

1) Um die Schwerkraft aller Kinderansichten von a zu steuern LinearLayout Container (wie Sie es in Ihrem Buch getan haben), verwenden android:gravity (nicht android:layout_gravity) in Layout - XML ​​- Datei oder setGravity() Methode im Code.

2) Um die Schwerkraft einer Kinderansicht in ihrem Container zu steuern, verwenden Sie android:layout_gravity XML-Attribut Im Code muss man das bekommen LinearLayout.LayoutParams von der Aussicht und seine Schwerkraft. Hier ist ein Codebeispiel, das in einem horizontal ausgerichteten Container eine Schaltfläche nach unten setzt:

import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...

Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams(); 
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);

Für horizontal LinearLayout container, wird die horizontale Schwerkraft der Kindansicht nacheinander links ausgerichtet und kann nicht geändert werden. Rahmen android:layout_gravity zu center_horizontal hat keine Wirkung. Die standardmäßige vertikale Schwerkraft ist center (oder center_vertical) und kann nach oben oder unten geändert werden. Eigentlich der Standard layout_gravity Wert ist -1 aber Android hat es vertikal zentriert.

Um die horizontalen Positionen von Kindansichten in einem horizontalen linearen Container zu ändern, kann man verwenden layout_weight, Rand und Füllung der Kindansicht.

Auf ähnliche Weise ist für den vertikalen Ansichtsgruppencontainer die vertikale Schwerkraft der untergeordneten Ansicht untereinander ausgerichtet und kann nicht geändert werden. Die horizontale Standardschwere ist der Mittelpunkt (oder center_horizontal) und kann nach links oder rechts geändert werden.

Eigentlich hat auch eine Kinderansicht wie eine Schaltfläche android:gravity XML-Attribut und der setGravity() Methode, um seine untergeordneten Ansichten zu steuern - der Text darin. Das Button.setGravity(int) ist damit verbunden developer.android.com Eintrag.


35
2017-07-30 20:01



Von dem, was ich sammeln kann Layoutgravität ist die Schwerkraft dieser Ansicht in seinem Elternteil, und Schwere ist die Schwerkraft der Kinder in dieser Ansicht.

Ich denke, das ist richtig, aber der beste Weg, das herauszufinden, ist es, herumzuspielen.


32
2017-08-14 09:37



Sehen Sie sich das Bild an, um sich über die Schwerkraft im Klaren zu sein


23
2018-02-04 07:17



Obwohl die Frage bereits beantwortet wurde, habe ich einige Beispiele, die die Verwendung von Gravitation, layout_gravity und layout_weight demonstrieren.

Sie finden die Beispiele unter http://juanpickselov.com/LayoutExamples.zip 

Ich habe die Dateien in Eclipse erstellt, die .svn-Unterordner entfernt und Stile, Strings, Farben usw. hinzugefügt. Die Layout-Dateien sind der Hauptpunkt der Demos. Da ich ein Java und Android Entwickler Newbie bin, kann man den Java ineffizient finden. Die Dateien können in ein Eclipse-Projekt kopiert werden oder ich habe sie auch in Netbeans mit dem für diese IDE verfügbaren Android-Entwicklungs-Plugin verwendet.


10
2017-11-23 05:43