无法使ActionBar显示具有适当样式的图标。
我的客户想要一个具有不同透明度的特定图标的ActionBar。如果我只是将图标放在res / menu中的XML文件中,那么我就无法让图标彼此相邻,每个图标的背景都会产生垂直间隙,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu"
android:icon="@drawable/ic_main_menu"
android:showAsAction="always"
android:title="@string/nav_menu_main"/>
<item
android:id="@+id/login"
android:icon="@drawable/ic_people"
android:showAsAction="always"
android:title="@string/nav_menu_login"/>
<item
android:id="@+id/location"
android:icon="@drawable/ic_location"
android:showAsAction="always"
android:title="@string/nav_menu_location"/>
等等。
因此,我创建了一个customView,并将相同的图标放在RelativeLayout中。这使得图标排列更好,并且不会在图标之间留下空白。即使我失去了使用上述菜单的能力,我也可以更轻松地设计样式。但是,它在PagerTitleStrip上方的图标行底部留下了间隙。 UX图像人员在图标周围留下了完全透明的搜索图标,但是所有其他图像都有一些浅色,这使得图标下方的额外填充非常明显。如果没有周围的轻微透明度,人们可能永远不会注意到,但我的客户希望填充消失。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/att_blue"
android:paddingBottom="-54dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:src="@drawable/ic_main_menu" />
<ImageView
android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_alignParentRight="true"
android:src="@drawable/ic_search" />
<ImageView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/search"
android:src="@drawable/ic_message" />
<ImageView
android:id="@+id/cart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/message"
android:src="@drawable/ic_cart" />
<ImageView
android:id="@+id/location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/cart"
android:src="@drawable/ic_location" />
<ImageView
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/location"
android:src="@drawable/ic_people" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/menu"
android:layout_marginLeft="364dp"
android:layout_toRightOf="@+id/menu"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/white" />
</RelativeLayout>
ActionBar bar = getActionBar();
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater li = LayoutInflater.from(this);
View customView = li.inflate(R.layout.global_nav_custom, null);
bar.setCustomView(customView);
所以,我的问题是A)我如何设置ActionBar的样式,以便将标准样式XML用作菜单,但删除垂直间隙。或者B)使用customView解决方案,底部有4个像素的间隙。
顺便说一下,ActionBarSherlock不是一个选项,因为该公司不需要第三方库
答案 0 :(得分:2)
使用标准操作按钮
您可以使用标准操作按钮为您的应用使用自定义主题来实现此目的 注意:为此,您的图标必须 32dp 或更低
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAppTheme" parent="android:Theme.Holo.Light">
<item name="android:actionButtonStyle">@style/ActionButton</item>
<item name="android:actionBarSize">32dp</item>
</style>
<style name="ActionButton" parent="android:Widget.ActionButton">
<item name="android:paddingStart">0dp</item>
<item name="android:paddingEnd">0dp</item>
<item name="android:paddingLeft">0dp</item>
<item name="android:paddingRight">0dp</item>
<item name="android:minWidth">0dp</item>
</style>
</resources>
不要忘记编辑AndroidManifest来设置活动/应用程序的主题;)
使用actionLayout
另一种方法是为每个操作项指定actionLayout
。这样,您可以随意保留图标,并将操作栏大小保持为 48dp 。
缺点是你必须使用OnClickListener
或使用onClick属性来处理菜单项作为按钮而不是菜单项> View
即可。 onClick
的MenuItem
属性不起作用。
当用户长按该项目时,您也应该显示菜单标题,就像标准操作按钮一样。
menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu"
android:actionLayout="@layout/widget_main_button"
android:showAsAction="always"
android:title="main"/>
<item
android:id="@+id/login"
android:actionLayout="@layout/widget_login_button"
android:showAsAction="always"
android:title="login"/>
<item
android:id="@+id/location"
android:actionLayout="@layout/widget_location_button"
android:showAsAction="always"
android:title="location"/>
</menu>
widget_main_button.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_main_button"
android:layout_width="@dimen/action_button_width"
android:layout_height="?android:actionBarSize"
android:background="@drawable/ic_main_menu"/>
设计android应用程序的有用工具是Jeff Gilfelt的Android Resource Navigator。这是一个Chrome扩展程序,可让您快速浏览默认的Android主题和样式,以找到需要更改的内容。