5

Von API-Ebene 11 setDividerDrawable() und setShowDividers() wurde auf LinearLayout eingeführt, wodurch das lineare Layout Teiler zwischen untergeordneten Elementen angezeigt werden kann. Ich würde diese Funktion gerne nutzen, aber ich ziele auch auf Geräte vor Honeycomb (API-Level < 11).LinearLayout mit Teilern auf Vorwabe

Eine Möglichkeit, dies zu beheben, besteht darin, LinearLayout zu erweitern und den Teiler manuell hinzuzufügen. Dies ist ein Prototyp:

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.LinearLayout; 

public class DividerLinearLayout extends LinearLayout 
{ 
    public DividerLinearLayout(Context context) 
    { 
     super(context); 
    } 

    public DividerLinearLayout(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    public DividerLinearLayout(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void addView(View child) 
    { 
     if(super.getChildCount() > 0) 
     { 
      super.addView(LayoutInflater.from(getContext()).inflate(R.layout.divider, null)); 
     } 
     super.addView(child); 
    } 
} 

jedoch eine solche Implementierung verwendet, wird das Verhalten aller Kunden über die Kinder Iterieren ändern. Einige Ansichten werden vom Client selbst eingefügt, einige werden von der DividerLinearLayout eingefügt. Probleme treten auch auf, wenn der Benutzer Ansichten bei bestimmten Indizes einfügt. Man könnte eine Konvertierung von Indizes implementieren, aber dies könnte zu fiesen Fehlern führen, wenn sie falsch ausgeführt werden. Außerdem denke ich, dass viel mehr Methoden außer Kraft gesetzt werden müssen.

Gibt es einen besseren Weg, das Problem zu lösen? Hat jemand schon ein frei verwendbares DividerLinearLayout Äquivalent entwickelt? Es scheint nicht in den Kompatibilitätsbibliotheken für Android zu existieren.

Antwort

10

Wenn ich mich nicht irre, hat die ActionBarSherlock-Bibliothek dies bereits implementiert, um rückwärtskompatible ActionBar-Registerkarten bereitzustellen. Vielleicht möchten Sie diese Bibliothek mit einbeziehen, bevor Sie Ihre eigene drehen.

Dies ist the code für die spezifische Klasse (com.actionbarsherlock.internal.widget.IcsLinearLayout).

+0

Ich benutze bereits ActionBarSherlock, daher war 'IcsLinearLayout' ein einfacher Drop-In-Ersatz. Es wirkt wie ein Zauber - danke, dass Sie darauf hingewiesen haben. – foens

+0

Süß! :) Jetzt weiß ich, es funktioniert sicher;) – dmon

+0

scheint wie es Fehler hat, wenn es in Xml verwendet wird. Außerdem funktioniert der von Ihnen angegebene Link nicht mehr. –

1

Das IcsLinearLayout ist intern und da ActionBarSherlock nicht mehr aktualisiert wird, wird empfohlen, eines von Google zu verwenden, das "LinearLayoutICS" genannt wird.

lesen Sie here wie Sie es verwenden.