5

A partir del nivel API 11 setDividerDrawable() y setShowDividers() se introdujo en LinearLayout, lo que permite que el diseño lineal muestre divisores entre elementos secundarios. Realmente me gustaría usar esta característica, pero también estoy apuntando a dispositivos antes de Honeycomb (nivel API < 11).LinearLayout con separadores en pre Honeycomb

Una forma de solucionar esto es extender LinearLayout y agregar el divisor manualmente. Se trata de 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); 
    } 
} 

Sin embargo, el uso de este tipo de implementación va a cambiar el comportamiento de los clientes interactuando sobre los niños. Algunos puntos de vista serán los insertados por el cliente mismo, algunos serán insertados por el DividerLinearLayout. También ocurrirán problemas si el usuario está insertando vistas en índices especificados. Uno podría implementar una conversión de índices, pero esto podría conducir a errores desagradables si se hace mal. Además, creo que se deben ignorar muchos más métodos.

¿Hay alguna forma mejor de resolver el problema? ¿Alguien ya ha desarrollado un equivalente de uso gratuito DividerLinearLayout? No parece existir en las bibliotecas de compatibilidad para Android.

Respuesta

10

Si no me equivoco, la biblioteca ActionBarSherlock ya implementó esto para proporcionar pestañas de barra de acciones hacia atrás compatibles. Es posible que desee incluir esa biblioteca primero y darle un giro antes de hacer su propia.

Esto es the code para la clase específica (com.actionbarsherlock.internal.widget.IcsLinearLayout).

+0

Ya estoy usando ActionBarSherlock, por lo que 'IcsLinearLayout' es un reemplazo fácil. Funciona como un amuleto, gracias por señalarlo. – foens

+0

¡Dulce! :) Ahora sé que funciona con seguridad;) – dmon

+0

parece que tiene errores cuando se usa en xml. Además, el enlace que proporcionó ya no funciona. –

1

IcsLinearLayout es interno y dado que ActionBarSherlock ya no se actualizará, se recomienda utilizar el de Google, llamado "LinearLayoutICS".

lea here de cómo usarlo.