5

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.

Odpowiedz

10

Jeśli się nie mylę, biblioteka ActionBarSherlock już to zaimplementowała, aby zapewnić kompatybilne z poprzednią wersją karty ActionBar. Możesz najpierw włączyć tę bibliotekę i nadać jej wir, zanim rzucisz własną.

To jest the code dla konkretnej klasy (com.actionbarsherlock.internal.widget.IcsLinearLayout).

+0

Używam już ActionBarSherlock, więc 'IcsLinearLayout' był łatwym zamiennikiem. Działa jak urok - dziękuję za wskazanie. – foens

+0

Słodki! :) Teraz wiem, że to działa na pewno;) – dmon

+0

wydaje się, że ma błędy, gdy jest używany w xml. również podany przez Ciebie link już nie działa. –

1

Interfejs IcsLinearLayout jest wewnętrzny, a ponieważ ActionBarSherlock nie będzie już aktualizowany, zaleca się skorzystanie z usługi Google, zwanej "LinearLayoutICS".

przeczytać here, jak z niego korzystać.

Powiązane problemy