Od poziomu interfejsu API 11 setDividerDrawable()
i setShowDividers()
został wprowadzony na LinearLayout
, umożliwiając układowi liniowemu przedstawienie dzielników między elementami potomnymi. Bardzo chciałbym skorzystać z tej funkcji, ale jestem również celem urządzeń przed Honeycomb (poziom API < 11).LinearLayout z dzielnikami na pre Honeycomb
Jednym ze sposobów naprawy jest rozszerzenie LinearLayout i ręczne dodanie dzielnika. To jest 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);
}
}
Jednak zastosowanie takiej implementacji zmieni zachowanie wszystkich klientów powtarzających się nad dziećmi. Niektóre widoki będą wstawiane przez samego klienta, niektóre będą wstawiane przez DividerLinearLayout
. Problemy będą się również pojawiać, jeśli użytkownik wstawia widoki do określonych indeksów. Można zaimplementować konwersję indeksów, ale może to prowadzić do nieprzyjemnych błędów, jeśli zrobi się źle. Ponadto, myślę, że wiele z tych metod musi zostać nadpisanych.
Czy istnieje lepszy sposób rozwiązania problemu? Czy ktoś już opracował swobodnie użyteczny odpowiednik w wersji DividerLinearLayout
? Wygląda na to, że nie ma go w bibliotekach zgodności dla systemu Android.
Używam już ActionBarSherlock, więc 'IcsLinearLayout' był łatwym zamiennikiem. Działa jak urok - dziękuję za wskazanie. – foens
Słodki! :) Teraz wiem, że to działa na pewno;) – dmon
wydaje się, że ma błędy, gdy jest używany w xml. również podany przez Ciebie link już nie działa. –