我使用拆分的ActionBar来显示一些简单的媒体控件。见下文:

我使用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的高度(参见下面的示例图像),似乎存在一些空白或空白,但我不知道如何删除它。

我在没有运气的情况下尝试了以下几种方法:
有人知道我该怎么解决这个问题吗?
发布于 2012-12-05 06:17:02
我想出了一个解决办法,就是在选择项目时,将所有项目的背景设置为一个小的径向梯度。梯度仍然被稍微切断,但很难被注意到。它使自定义按钮和常规按钮看起来几乎相同。

首先,我在一个名为res/drawable/Radialbackound.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>然后,我创建了一个名为res/ StateListDrawable /drawable/actionitembackound.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>然后,我给我的自定义ActionViews的背景分配了可声明的状态:
rewindButton.setBackgroundResource(R.drawable.actionitembackground);然后,我修改了actionbar的样式,将这个新的径向填充包含在常规操作栏项中。
因此,在value/styes.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" >这似乎比尝试调试背景被切断更容易。也许改天我会花更多的时间在这上面。
发布于 2014-09-03 14:57:31
我也遇到了同样的问题,但是在操作栏上有一个旋转器,您需要将yout视图的de minHeight设置为actionBar高度:
<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"
/>
https://stackoverflow.com/questions/12926864
复制相似问题