wake-up-neo.net

Wie kann der Abstand zwischen Elementen von LinearLayout nur einmal angegeben werden?

Ich bin kürzlich wieder auf ein Problem gestoßen, das ich in den letzten Jahren schon mehrmals hatte. 

LinearLayout ist ein sehr bequemer layout manager. Was ich jedoch total vermisse, ist die Möglichkeit, in einem einzigen XML-Tag einen bestimmten Abstand zwischen den Elementen (wie Auffüllen) hinzuzufügen. 

Mit einem Tag meine ich, dass ich in der Deklaration des LinearLayout den Abstand zwischen den Elementen definieren kann (z. B. in einem vertikalen LinearLayout den vertikalen Abstand zwischen zwei Elementen in diesem Layout). 

Ich weiß, dass ich dies tun kann, indem ich jedem Element in LinearLayout das XML-Tag Android:layout_marginTop oder etwas ähnliches hinzufüge. 

Ich möchte es jedoch nur in einem Punkt definieren können, da der Abstand für alle Elemente gleich ist. 

Kennt jemand eine einfache Möglichkeit, dies zu tun (keine benutzerdefinierte LinearLayout-Implementierung oder ähnliches)? Ich bevorzuge eine Lösung, die direkt in XML arbeitet, ohne dass eine Codierung erforderlich ist.

17
Dude

es wird empfohlen, auf alle Elemente im linearen Layout einen Stil anzuwenden 

Android:style="@style/mystyle"

<style name="mystyle">
      <item name="Android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>
18
chris-tulip

Legen Sie als Trennlinie für Ihr Layout benutzerdefinierte transparente Zeichenelemente fest:

<LinearLayout
  Android:showDividers="middle"
  Android:divider="@drawable/divider">

Neue Ressource im Drawables-Ordner (divider.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android = "http://schemas.Android.com/apk/res/Android">
  <size
    Android:width = "0dp"
    Android:height = "16dp"/>
</shape>
4
Zon

@ Chris-Tulips Antwort hat mir sehr geholfen - auch mit guter Praxis.

Für diejenigen von Ihnen, die möglicherweise einen Eclipse-Fehler erhalten, weil sie, wie ich, einen Ressourcenbezeichner für "Style" im Paket Android verpasst haben, müssen Sie den Android-Namensraum nicht hinzufügen. 

Android: style = "xx" führt den Fehler aus, während style = "xx" korrekt ist. Funky, aber für jeden, der diesen Fehler hat, könnte dies helfen.

1
Watercayman

Sie sollten Android:layout_marginTop oder Android:layout_marginLeft zu einem Element hinzufügen, das über den Einzug verfügen muss. Abhängig von Android:orientation Ihrer LinearLayout.

0
Iurii

Sie können Ihr einzelnes Element "Prototyp" in einer separaten XML-Datei definieren und dann die Elemente aus dieser Datei aufblasen, dynamisch im Code einfügen und sie in Ihr lineares Layout einfügen.

Sie definieren dann den Abstand auf dem tatsächlichen Element, nicht auf dem übergeordneten LinearLayout (beispielsweise als Android:layout_marginTop), und der Abstand wird auf alle Ihre Elemente angewendet, wenn Sie sie aufblasen.

EDIT:

container.xml:

<LinearLayout
    Android:id="@+id/parent"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!-- Your items will be added here -->

</LinearLayout>

item.xml:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="4dp">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="This is my child" />

</LinearLayout>

MyActivity.Java:

// Put this in a suitable place in your Java code, perhaps
// in "onCreate" or "onResume" depending on where and how
// you initialize your view. You can, of course inflate
// any number of instances of the item and add them to
// your parent LinearLayout.
LayoutInflater inflater = LayoutInflater.from(context);
View item = inflater.inflate(R.layout.item, null, false);

LinearLayout container = findViewById(R.id.parent);
container.addView(view);

Ich habe mich beim Testen des Codes nicht bemüht, aber "sollte" so funktionieren, wie es ist :-)

0
dbm