我在我的项目中使用 ActionBarSherlock ,我正在显示3个带有自定义minWidth的动作按钮。这是我的代码:
menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item1" android:showAsAction="always"
android:title="@string/empty" android:icon="@drawable/item1_selector" />
<item android:id="@+id/menu_item2" android:showAsAction="always"
android:title="@string/empty" android:icon="@drawable/item2_selector" />
<item android:id="@+id/menu_item3" android:showAsAction="always"
android:title="@string/empty" android:icon="@drawable/item3_selector" />
</menu>
我的风格
值/ styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="Theme.Sherlock.Light">
<item name="android:windowBackground">@android:color/white</item>
<item name="actionBarItemBackground">@color/White</item>
<item name="actionButtonStyle">@style/CustomActionButtonStyle</item>
</style>
<style name="CustomActionButtonStyle" parent="Widget.Sherlock.ActionButton">
<item name="android:minWidth">32dip</item>
<item name="android:padding">0dip</item>
</style>
</resources>
值-V14 / styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="Theme.Sherlock.Light">
<item name="android:windowBackground">@android:color/white</item>
<item name="android:actionBarItemBackground">@color/White</item>
<item name="actionBarItemBackground">@color/White</item>
<item name="android:actionButtonStyle">@style/CustomActionButtonStyle</item>
<item name="actionButtonStyle">@style/CustomActionButtonStyle</item>
</style>
</resources>
此代码不适用于具有android 4.1.2(HDPI)和Galaxy S3 mini android 4.1.2(HDPI)的Galaxy S2。在这些设备中,我的动作按钮似乎具有默认宽度(56dip),因此它们之间的空间看起来更大。但是在具有相同Android版本的Galaxy S3中,一切正常,风格也适用。我的代码也适用于许多具有不同Android版本和屏幕密度的设备。
如何实现为许多不同设备设置minWidth或缩小空间,有没有办法以编程方式执行此操作?
答案 0 :(得分:0)
最后,我最终为操作栏中的每个项目设置了自定义操作视图(ImageButton)。 首先,我通过删除图标字段来更改 menu.xml 。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item1" android:showAsAction="always"
android:title="@string/empty" />
<item android:id="@+id/menu_item2" android:showAsAction="always"
android:title="@string/empty" />
<item android:id="@+id/menu_item3" android:showAsAction="always"
android:title="@string/empty" />
</menu>
然后我使用我现有的按钮样式( custom_action_button.xml )为我的操作按钮创建了一个自定义布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/padding_small"
android:clickable="true">
<ImageButton
android:id="@+id/custom_action_bar_button"
style="@style/CustomActionButtonStyle"
android:src="@drawable/some_drawable"
android:clickable="false"
android:focusable="true"/>
</FrameLayout>
最后在我的活动中( onCreateOptionsMenu 方法)我做了:
getSupportMenuInflater().inflate(R.menu.main_menu, menu);
final MenuItem item = menu.findItem(R.id.menu_item1);
LayoutInflater li = LayoutInflater.from(this);
View actionView = li.inflate(R.layout.custom_action_button, null);
ImageButton menuItemButton = (ImageButton) actionView.findViewById(R.id.custom_action_bar_button);
item.setActionView(actionView);
//...and so on for my other 2 buttons
//Setting a listener for the button
item.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//do stuff
}
});
通过这种方式,我可以使用CustomActionButtonStyle在我的所有设备中一致地设置按钮之间的间距。