2013-08-07 50 views
0

我正在使用ActionBarSherlock在我的項目中,我正在顯示帶有自定義minWidth的3個動作按鈕。這裏是我的代碼:ActionButton minWidht在某些設備中被忽略

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

最後,我最終爲操作欄中的每個項目設置了一個自定義操作視圖(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。