2013-11-13 2 views
1

Я разрабатываю приложение для планшетов Android. Здесь у меня есть одна проблема с пользовательским интерфейсом элементов меню панели действий.Разделители для элементов меню панели действий

Примечание: Я использую встроенную панель инструментов для Android.

1) Как показать разделитель между пунктами меню, например, как показано на изображении. enter image description here
Я пробовал использовать стили разделителей и пользовательские стили, но это не отражается в моей панели действий.

2) Как добавить несколько пунктов меню в один пункт меню, например, как показано на картинке. enter image description here

Я пробовал с пользовательским макетом, но меню переполнения для предметов не отображается. Я попытался с PopupMenu для меню переполнения, но значок не отображается в списке переполнения.

Здесь я использовал стили для применения панели действий, styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

<style name="AppTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item> 
    <item name="android:textAllCaps">false</item> 
    <item name="android:actionMenuTextAppearance">@style/AppTheme.ActionBar.MenuTextStyle</item> 
    <item name="android:actionOverflowButtonStyle">@style/OverFlow</item> 
    <item name="android:divider">@color/dividercolor</item> 

</style> 

    <style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow"> 
    <item name="android:src">@drawable/ic_actionbar_dots</item> 
</style> 


<style name="AppTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
    <item name="android:background">@drawable/actionbar_background</item> 
    <item name="android:height">100dip</item> 
    <item name="android:titleTextStyle">@style/AppTheme.ActionBar.Text</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:divider">@drawable/divider</item> 
    <item name="android:showDividers">beginning</item> 
    <item name="android:dividerPadding">10dp</item> 
</style> 

<style name="AppTheme.ActionBar.MenuTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Menu"> 
    <item name="android:textAllCaps">false</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textSize">26sp</item> 
</style> 

<style name="AppTheme.ActionBar.Text" parent="@android:style/TextAppearance"> 
    <item name="android:textAllCaps">false</item> 
    <item name="android:textColor">@color/white</item> 
</style> 

menu.xml

<group android:id="@+id/menu_mainGroup" > 
    <item 
     android:id="@+id/connection" 
     android:icon="@drawable/nw_pt_calc" 
     android:showAsAction="always" 
     android:title=" "> 
    </item> 
    <item 
     android:id="@+id/status_menu" 
     android:actionLayout="@layout/application_status_overflowmenu" 
     android:showAsAction="ifRoom|withText"> 
    </item> 

    <!-- 
    <item 
     android:id="@+id/status" 
     android:icon="@drawable/ic_available" 
     android:showAsAction="always" 
     > 
     <menu> 
      <item 
       android:id="@+id/status1" 
       android:icon="@drawable/ic_available" 
       android:showAsAction="always" 
       android:title="@string/menu_available"> 
      </item> 
      <item 
       android:id="@+id/status2" 
       android:icon="@drawable/ic_busy" 
       android:showAsAction="always" 
       android:title="@string/menu_busy"> 
      </item> 
      <item 
       android:id="@+id/status3" 
       android:icon="@drawable/ic_logoff" 
       android:showAsAction="always" 
       android:title="@string/menu_logoff"> 
      </item> 
     </menu> 
    </item> 
    <item 
     android:id="@+id/display_pic" 
     android:icon="@drawable/ic_person" 
     android:showAsAction="always"> 
    </item> 


    <item 
     android:id="@+id/display_name" 
     android:showAsAction="always"> 
    </item> 


    --> 
    <item 
     android:id="@+id/menu_search" 
     android:icon="@drawable/ic_search" 
     android:showAsAction="always" 
     android:visible="false"> 
    </item> 
    <item 
     android:id="@+id/help" 
     android:icon="@drawable/ic_help" 
     android:showAsAction="always" 
     android:visible="false"> 
    </item> 
    <item 
     android:id="@+id/about" 
     android:showAsAction="never" 
     android:title="@string/about"> 
    </item> 
    <!-- 
     <item 
     android:id="@+id/notification_history" 
     android:showAsAction="never" 
     android:title="@string/notification_history"> 
    </item> 
    <item 
     android:id="@+id/comm_msg_history" 
     android:showAsAction="never" 
     android:title="@string/comm_msg_history"> 
    </item> 



    --> 
</group> 

Помощь будет оценена. Спасибо, с нетерпением жду услышать ответы от выродков :).

ответ

1

Я не знаю, разрешили ли вы свою проблему. Но я могу объяснить вам на всякий случай.
Прежде всего, чтобы настроить делитель в ActionBar, вы должны сделать это в своем Theme с родителем ActionButton. Вы можете сделать это:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:divider">@color/dividercolor</item> 
</style> 

<style name="AppTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
    <item name="android:divider">@drawable/divider</item> 
</style> 

Попробуйте так:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionButtonStyle">@style/ActionButton</item> 
    <item name="android:actionBarDivider">@color/blue</item> 
    <item name="actionBarDivider">@color/blue</item> 
</style> 

<style name="ActionButton" parent="@android:style/Widget.Holo.Light.ActionButton"> 
    <item name="android:background">@color/blue</item> 
</style> 

Вы можете прочитать решение здесь: Can't change color of actionBar divider и там: ActionBar MenuItem Divider.

Тогда вы можете создать 9-Patch выписку из рисунка, чтобы точно соответствовать вашему образу. Попробуйте использовать что-то вроде этого изображения: divider_blue.9.png
Черная рамка указывает, где развернуть изображение. Я сделал это с левой/правой стороны, чтобы расширить ваш разделитель на его высоте. Вы можете прочитать Draw 9-patch из Документации, чтобы узнать, как использовать Draw 9-Patch tool в sdk.
Или, вы можете сделать это в XML, что-то, как показано ниже:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- first line vertical blue --> 
    <item android:left="1dp"> 
     <shape android:shape="line"> 
      <stroke 
       android:color="@color/blue" 
       android:width="1dp" /> 
     </shape> 
    </item> 
    <!-- second line vertical white --> 
    <item android:right="1dp"> 
     <shape android:shape="line"> 
      <stroke 
       android:color="@color/white" 
       android:width="1dp" /> 
     </shape> 
    </item> 
</layer-list> 

После этого, вы просто должны объявить его в вашем style.xml как:
<item ...>@drawable/blue_divider</item>.

Теперь у вас есть настроить делитель (=


Затем ваш пользовательский макет в ActionBar
Это можно сделать, как показано ниже:.

ActionBar actionBar = getActionBar(); 
actionBar.setCustomView(R.layout.application_status_overflowmenu); 
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM| 
            ActionBar.DISPLAY_SHOW_HOME); 

И application_status_overflowmenu.xml будет что-то вроде:

<RelativeLayout 
    android="@+id/theCustomIcon" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:layout_gravity="right" android:gravity="center" 
    android:paddingLeft="10dp" android:paddingRight="10dp" 
    android:clickable="true" > 

    <ImageView 
      android:id="@+id/blockCustomIcon" 
      android:layout_width="50dp" android:layout_height="50dp" 
      android:src="@drawable/green_block" 
      android:layout_centerVertical="true" 
      android:layout_alignParentLeft="true" /> 

    <ImageView 
      android:id="@+id/imgCustomIcon" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:src="@drawable/green_block" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@id/blockCustomIcon" /> 

    <TextView 
      android:id="@+id/txtCustomIcon" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:src="@drawable/green_block" 
      android:layout_centerVertical="true" 
      android:layout_alignParentRight="true" 
      android:gravity="left" /> 

</RelativeLayout> 

И, наконец, вы можете иметь доступ к View с обновлять элементы:

TextView text = (TextView) actionBar.getCustomView().findViewById(R.id.txtCustomIcon); 
text.setText("Emily Nichols"); 

Это все!
Если ваши параметры меню исчезают, проверьте, действительно ли ваш onCreateOptionsMenu раздувает хороший макет, и если он возвращает true. Вы также можете добавить пользовательский элемент перед меню опций или добавить элемент динамически. Я позволил вам сделать это, как вы хотите.
Надеюсь, это будет полезно, и это тоже поможет.

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