5

Da livello API 11 setDividerDrawable() e setShowDividers() è stato introdotto su LinearLayout, consentendo al layout lineare di mostrare divisori tra elementi figlio. Mi piacerebbe davvero utilizzare questa funzione, ma sto anche prendendo di mira i dispositivi prima di Honeycomb (livello API < 11).LinearLayout con divisori su pre Honeycomb

Un modo per risolvere questo problema è estendere LinearLayout e aggiungere il divisore manualmente. Si tratta di un prototipo:

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); 
    } 
} 

Tuttavia, utilizzando tale attuazione cambierà il comportamento di eventuali clienti iterare sui figli. Alcuni punti di vista saranno quelli inseriti dal cliente stesso, alcuni saranno inseriti dallo DividerLinearLayout. I problemi si verificano anche se l'utente sta inserendo viste negli indici specificati. Si potrebbe implementare una conversione di indici, ma questo potrebbe portare a errori brutti se fatto male. Inoltre, penso che molti più metodi debbano essere sovrascritti.

Esiste un modo migliore per risolvere il problema? Qualcuno ha già sviluppato un equivalente DividerLinearLayout liberamente utilizzabile? Non sembra esistere nelle librerie di compatibilità per Android.

risposta

10

Se non sbaglio, la libreria ActionBarSherlock l'ha già implementata per fornire schede ActionBar compatibili all'indietro. Potresti voler includere prima quella libreria e farla girare prima di lanciarla.

Questo è the code per la classe specifica (com.actionbarsherlock.internal.widget.IcsLinearLayout).

+0

Sto già utilizzando ActionBarSherlock, quindi 'IcsLinearLayout' è stato un facile rimpiazzo. Funziona come un incantesimo - grazie per averlo indicato. – foens

+0

Dolce! :) Ora so che funziona di sicuro;) – dmon

+0

sembra che abbia errori quando viene utilizzato in xml. inoltre, il link che hai fornito non funziona più. –

1

IcsLinearLayout è interno e poiché ActionBarSherlock non verrà più aggiornato, si consiglia di utilizzare quello di Google, denominato "LinearLayoutICS".

leggi here su come usarlo.

Problemi correlati