【问题标题】:ActionButton minWidht ignored in some devicesActionButton minWidht 在某些设备中被忽略
【发布时间】:2013-08-07 10:54:21
【问题描述】:

我在我的项目中使用 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>

还有我的风格

values/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>

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

【问题讨论】:

    标签: android actionbarsherlock


    【解决方案1】:

    最后,我为操作栏中的每个项目设置了自定义操作视图 (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-10-17
      • 2012-11-08
      • 2019-02-17
      • 2017-05-11
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      相关资源
      最近更新 更多