LinearLayout с разделителями на pre Honeycomb

Начиная с API уровня 11 setDividerDrawable() и setShowDividers() были введены в LinearLayout , позволяя линейной компоновке показывать разделители между дочерними элементами. Я бы очень хотел использовать эту функцию, но я также настраиваю устройства до Honeycomb (уровень API <11).

Один из способов исправить это – расширить LinearLayout и добавить разделитель вручную. Это прототип:

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

Однако использование такой реализации изменит поведение любых клиентов, которые будут итерации над детьми. Некоторые представления будут теми, которые вставил сам клиент, некоторые из них будут вставлены DividerLinearLayout . Проблемы также возникают, если пользователь вставляет представления в указанные индексы. Можно было бы реализовать преобразование индексов, но это могло бы привести к неприятным ошибкам, если это будет сделано неправильно. Кроме того, я думаю, что намного больше методов нужно переопределить.

Есть ли лучший способ решить проблему? Кто-то уже разработал свободно используемый эквивалент DividerLinearLayout ? Кажется, он не существует в библиотеках совместимости для Android.

Если я не ошибаюсь, библиотека ActionBarSherlock уже реализовала это, чтобы обеспечить обратные совместимые вкладки ActionBar. Возможно, вы захотите включить эту библиотеку в первую очередь и дать ей вихрь, прежде чем переходить на свою собственную.

Это код для конкретного класса (com.actionbarsherlock.internal.widget.IcsLinearLayout).

IcsLinearLayout является внутренним, и поскольку ActionBarSherlock больше не будет обновляться, рекомендуется использовать один из Google, называемый «LinearLayoutICS».

Прочитайте здесь, как его использовать.

Intereting Posts
Преобразование входного потока в строковое значение в приложении Java Android Как кодировать url в android? Как найти учетную запись Gmail, связанную с Android Market? Как указать порядок сортировки для детей в расширяемом списке? Как я могу установить размер ProgressDrawable пользовательской ширины, чтобы быть меньше, чем ProgressBackground Обнаружено повреждение стека, dalvik VM crash Просмотр Gone при нажатии за пределы этого вида Преобразование json в объект Map.Entry с помощью Gson Анализ: получение обратного вызова при завершении регистрации GCM Eclipse не обновляет apk при внесении изменений в приложение phonegap HasSystemFeature (PackageManager.FEATURE_CAMERA) возвращает true для устройства без камеры Как получить изображения с устройства в приложении для Android android Android Alert Dialog с дополнительным фоном Увеличение / уменьшение масштаба в веб-браузере Android4OpenCV: настройка разрешения при запуске