2012-10-17 31 views
3

我正在使用分離的ActionBar來顯示一些簡單的媒體控件。見下圖:使用MenuItem.setActionView保留ActionBarSherlock中的默認selectableItemBackground

Media Controls with Correct Background

我用MenuItem.setActionView來覆蓋快進的默認視圖和後退按鈕,因爲我需要在用戶首次觸摸控制檢測(開始倒帶),隨後釋放控制(完成倒帶)。見下面的代碼:

  ImageView rewindButton = new ImageView(getBaseContext()); 
     rewindButton.setId(rewindViewID); 
     rewindButton.setClickable(true); 
     rewindButton.setImageResource(R.drawable.ic_action_rewind); 
     rewindButton.setOnTouchListener(forwardBackwardListener); 
     MenuItem rewindMenu = menu.findItem(R.id.menu_rewind); 
     rewindMenu.setActionView(rewindButton); 
     return true; 

這對我來說都很好,但有一個意想不到的副作用。當我觸摸快進或快退按鈕時,我沒有得到默認的藍色背景(如上面的跳過後退控制所示)。它根本不顯示背景。我嘗試在onTouch處理程序中設置背景,但背景不像默認的那樣填充ActionBar的高度(請參見下面的示例圖像),似乎有一些填充或邊距,但我不喜歡不知道如何刪除它。

Menu with Short Background

我都試過,沒有運氣以下:

  • 設置的ImageView手動的高度,試圖填補動作條
  • 返回真或假從onTouch處理器

有誰知道我會如何解決這個問題?

回答

1

我想出了一個解決方法,它將所有項目的背景設置爲選中項目時的小徑向漸變。漸變仍然被切斷了一點,但它幾乎不明顯。它使自定義按鈕和常規按鈕看起來幾乎相同。

You end up with something like this

首先我在一個名爲res /抽拉/ radialbackground.xml文件中創建的徑向漸變。注意最終顏色是透明的,這對於將漸變漸變爲無,因此它不會填充整個矩形非常重要。

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 

     <gradient 
     android:centerX="0.5" 
     android:centerY="0.5" 
     android:endColor="#00FFFFFF" 
     android:gradientRadius="35" 
     android:startColor="@color/Gray" 
     android:type="radial" 
     /> 
</shape> 

然後,我創建了一個名爲StateListDrawable RES /繪製/ actionitembackground.xml

<?xml version="1.0" encoding="utf-8"?> 


<selector xmlns:android="http://schemas.android.com/apk/res/android" 
        android:exitFadeDuration="@android:integer/config_mediumAnimTime" > 
     <item android:state_pressed="true" android:drawable="@drawable/radialbackground" /> 
     <item android:drawable="@android:color/transparent" /> 
</selector> 

然後我分配了statelistdrawable到我的自定義ActionViews的背景:

rewindButton.setBackgroundResource(R.drawable.actionitembackground); 

然後我改變用於操作欄的樣式以包含常規操作欄項目的此新的徑向填充。

所以,在價值觀/ styles.xml我說:

<style name="Theme.MyTheme" parent="Theme.Sherlock.Light"> 
     <item name="android:selectableItemBackground">@drawable/actionitembackground</item> 
     <item name="selectableItemBackground">@drawable/actionitembackground</item> 
</style> 

在我的情況下,基本樣式爲Theme.Sherlock.Light但你將取代與任何風格,你想修改。

然後我在AndroidManifest中將該樣式設置爲我的應用程序的樣式。xml

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.MyTheme" 
     android:uiOptions="splitActionBarWhenNarrow" > 

這似乎比通過嘗試調試背景被切斷的原因挖掘更容易。也許我會在另一天花更多時間在它上面。

0

我有完全相同的問題,但操作欄上的微調, 需要YOUT鑑於去了minHeight設置爲動作條的高度:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/drop_down" 
android:minHeight="?android:attr/actionBarSize" 
> 
<Spinner 
    android:id="@+id/category_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/default_selector" 
    android:minHeight="?android:attr/actionBarSize" 
    android:gravity="center_vertical|right" 
    android:paddingRight="5dp" 
    /> 

+0

我無法檢查,如果這在我的項目中繼續工作,但感謝解決方案。 – Sudsy

相關問題