0

我在我的项目中使用ActionBarSherlock,我正在显示 3 个带有自定义 minWidth 的操作按钮。这是我的代码:

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

还有我的风格

值/样式.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 或一致地减少空间,有没有办法以编程方式做到这一点?

4

1 回答 1

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 在我的所有设备中一致地设置按钮之间的间距。

于 2013-09-11T09:24:29.793 回答