1

我正在开发平板电脑安卓应用程序。在这里,我遇到了操作栏菜单项的 UI 问题。

注意:我使用的是 android Native 操作栏。

1) 如何在菜单项之间显示分隔符,如图所示。在此处输入图像描述
我尝试了分隔样式和自定义样式,但它没有反映在我的操作栏中。

2)如何将多个菜单项添加到一个菜单项中,如图所示。 在此处输入图像描述

我尝试使用自定义布局,但未显示项目的溢出菜单。我尝试使用 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>

菜单.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>

帮助将不胜感激。谢谢期待听到极客的回答:)。

4

1 回答 1

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与您的图像完全相同的可绘制对象。尝试使用类似这样 分隔器蓝色.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.xmlas:中声明它
<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>

最后,您可以访问Views 来更新项目:

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

就这样!
如果您的菜单选项消失,请检查您onCreateOptionsMenu的布局是否正确,是否返回 true。您还可以在选项菜单前面添加自定义项或动态添加项。我让你随心所欲。
我希望这将是有用的,它也会有所帮助。

于 2013-12-16T17:36:52.287 回答