0

Я пытаюсь реализовать макет отмены/выполнения в своей панели действий с помощью ActionBarSherlock, адаптировав найденный код here.ActionBarSherlock - разделители, не показывающие pre-ICS

Все работает по назначению на ICS или Jelly Bean (где ABS будет использовать родной ActionBar). При тестировании на Gingerbread (API 10), все работает отлично, за исключением, что делитель не отображается между кнопками:

Gingerbread-missing-divider

Я сначала подумал, что это проблема с делителем изображения, но даже при использовании код, как:

android:divider="#f00" 

Нет делителем на Gingerbread появляется, но появляется ярко-красный, как и ожидалось, на ICS/JB. По-видимому, ActionBarSherlock 3.5+ использует собственное поведение для отображения разделителя, поэтому почему делитель не появляется при использовании ABS, но появляется, когда используется родной ActionBar?

Вот мой XML:

actionbar_custom_view_done_discard.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="?attr/dividerVertical" 
    android:dividerPadding="12dp" 
    android:orientation="horizontal" 
    android:showDividers="middle" > 

    <include layout="@layout/actionbar_cancel_button" /> 

    <include layout="@layout/actionbar_done_button" /> 

</LinearLayout> 

actionbar_cancel_button.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/actionbar_cancel" 
    style="?actionButtonStyle" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:background="@drawable/abs__item_background_holo_light" > 

    <TextView 
     style="?actionBarTabTextStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:drawableLeft="@drawable/ic_action_cancel" 
     android:drawablePadding="8dp" 
     android:gravity="center_vertical" 
     android:paddingRight="20dp" 
     android:text="@string/action_cancel" /> 

</FrameLayout> 

actionbar_done_button.xml точно так же, как и выше, но с имя, текст и значок изменены.

Заранее спасибо.

ответ

6

Разделители в LinearLayout являются API 11+. Это не имеет никакого отношения к ActionBarSherlock.

Вы можете просто добавить 1dp-представление с фоном между двумя элементами, чтобы обойти это.

+0

Ах, спасибо! Тогда я это сделаю. – Ellis

1

Это то, что я нашел, чтобы быть лучшей реализацией пользовательского ActionBar макета:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 

<include layout="@layout/actionbar_cancel_button" /> 

<!-- View below is used because the android:divider attribute only works on API 11+. This is identical in appearance to that. --> 

<View 
    style="@style/Widget.Sherlock.Light.ActionButton" 
    android:layout_width="1dp" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="12dp" 
    android:layout_marginTop="12dp" 
    android:background="@drawable/abs__list_divider_holo_light" /> 

<include layout="@layout/actionbar_done_button" /> 

+0

Спасибо за обмен, это чище, чем мой вид. Возможно, опубликуйте весь LinearLayout, как я сделал так, чтобы люди могли копировать и вставлять – Maragues

+0

. Это на самом деле из [this] (http://stackoverflow.com/a/15390898/2044848) ответа, который использовал встроенную реализацию в папке layout-v11 и пользовательский в папке макета. Это сработало, но я чувствовал, что это ненужное дублирование. Я отредактирую свой ответ, чтобы включить весь макет. Макеты кнопок описаны в моем вопросе. – Ellis

+0

Можете ли вы разместить код макета для одной из кнопок кнопок? благодаря – speedynomads

Смежные вопросы