it-swarm.com.de

Lineares Layout für Android - Wie bleibt das Element am unteren Rand?

Ich habe eine TextView, die ich unten in einer Landschaftsaktivität anheften möchte, die LinearLayout mit vertikal angeordneten Elementen verwendet. 

Ich habe Android:gravity="bottom" in der Textansicht festgelegt, aber es ist immer noch gern, dass es genau unter dem letzten Element der LinearLayout liegt. 

Irgendwelche Vorschläge?

67
Androider

Update: Ich bekomme immer noch Upvotes zu dieser Frage, die immer noch die akzeptierte Antwort ist und die ich meiner Meinung nach schlecht beantwortet habe. Um sicherzustellen, dass die besten Informationen verfügbar sind, habe ich mich entschlossen, diese Antwort zu aktualisieren.

In modernen Android würde ich ConstraintLayout verwenden, um dies zu tun. Es ist performanter und unkomplizierter.

<ConstraintLayout>
   <View
      Android:id="@+id/view1"
      ...other attributes elided... />
   <View
      Android:id="@id/view2"        
      app:layout_constraintTop_toBottomOf="@id/view1" />
      ...other attributes elided... />

   ...etc for other views that should be aligned top to bottom...

   <TextView
    app:layout_constraintBottom_toBottomOf="parent" />

Wenn Sie kein ConstraintLayout verwenden möchten, ist die Verwendung eines LinearLayout mit einer erweiterten Ansicht eine einfache und großartige Möglichkeit, um den zusätzlichen Platz zu beanspruchen (siehe Antwort von @Matthew Wills). Wenn Sie den Hintergrund einer der Ansichten über der unteren Ansicht nicht erweitern möchten, können Sie eine unsichtbare Ansicht hinzufügen, um den Platz zu beanspruchen.

Die Antwort, die ich ursprünglich gegeben habe, ist ineffizient. Ineffizienz ist für ein einzelnes Top-Level-Layout keine große Sache, aber es wäre eine schreckliche Implementierung in einer ListView oder RecyclerView, und es gibt einfach keinen Grund, dies zu tun, da es bessere Möglichkeiten gibt, die ungefähr so ​​sind gleicher Aufwand und Komplexität, wenn nicht einfacher.

Nehmen Sie die TextView aus dem LinearLayout heraus und fügen Sie anschließend das LinearLayout und die TextView in ein RelativeLayout ein. Fügen Sie der TextView das Attribut Android:layout_alignParentBottom="true" hinzu. Mit dem gesamten Namespace und anderen Attributen außer dem oben angegebenen Attribut:

<RelativeLayout>
  <LinearLayout>
    <!-- All your other elements in here -->
  </LinearLayout>
  <TextView
    Android:layout_alignParentBottom="true" />
</RelativeLayout>
99
Brian Cooley

Sie müssen eine Ihrer oberen Ansichten erweitern, um den verbleibenden Platz zu füllen, indem Sie Android:layout_weight="1" darauf setzen. Dies wird Ihre letzte Sicht nach unten drücken.

Hier ist eine kurze Skizze dessen, was ich meine:

<LinearLayout Android:orientation="vertical">
    <View/>
    <View Android:layout_weight="1"/>
    <View/>
    <View Android:id="@+id/bottom"/>
</LinearLayout>

jede untergeordnete Ansichtshöhe ist "wrap_content" und alles andere ist "fill_parent".

105
Matthew Willis

Ich denke es wird eine perfekte Lösung sein:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <!-- Other views -->
    <Space
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="1"/>

    <!-- Target view below -->
    <View
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

</LinearLayout>
49

Sie sollten den Parameter Schwerkraft nach unten setzen nicht in der Textansicht sondern im linearen Layout . So was:

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:gravity="bottom|end">
    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Something"/>
</LinearLayout>

Schritt 1: Erstellen Sie zwei Ansichten innerhalb eines linearen Layouts

Schritt 2: Erste Ansicht muss auf Android eingestellt sein: layout_weight = "1"

Schritt 3: Die zweite Ansicht wird automatisch nach unten verschoben

<LinearLayout
Android:id="@+id/botton_header"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >

    <View
    Android:layout_width="match_parent"
    Android:layout_height="0dp"
    Android:layout_weight="1" />

    <Button
    Android:id="@+id/btn_health_advice"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"/>


</LinearLayout>
5
Vinod Joshi

WIE DIESES

 <LinearLayout
Android:id="@+id/LinearLayouts02"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:gravity="bottom|end">

<TextView
    Android:id="@+id/texts1"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent"
    Android:layout_weight="2"
    Android:text="@string/forgotpass"
    Android:padding="7dp"
    Android:gravity="bottom|center_horizontal"
    Android:paddingLeft="10dp"
    Android:layout_marginBottom="30dp"
    Android:bottomLeftRadius="10dp"
    Android:bottomRightRadius="50dp"
    Android:fontFamily="sans-serif-condensed"
    Android:textColor="@color/colorAccent"
    Android:textStyle="bold"
    Android:textSize="16sp"
    Android:topLeftRadius="10dp"
    Android:topRightRadius="10dp"
   />

</LinearLayout>
0

Sie können auch verwenden 

Android:layout_gravity="bottom"

für Ihre Textansicht

0
Pmap Technotech