3

我正在使用拆分 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 的高度(参见下面的示例图),似乎有一些填充或边距,但我没有不知道怎么去掉。

带有短背景的菜单

我试过以下没有运气:

  • 手动设置 ImageView 的高度以尝试填充 ActionBar
  • 从 onTouch 处理程序返回 True 或 False

有谁知道我该如何解决这个问题?

4

2 回答 2

1

我想出了一个解决方法,即在选择项目时将所有项目的背景设置为一个小的径向渐变。渐变仍然被切断了一点,但几乎不明显。它使自定义按钮和常规按钮看起来几乎相同。

你最终会得到这样的东西

首先,我在一个名为 res/drawable/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>

然后我创建了一个名为 res/drawable/actionitembackground.xml 的 StateListDrawable

<?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);

然后我更改了操作栏的样式,以包含常规操作栏项目的新径向填充。

所以,在 values/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" >

这似乎比尝试调试背景被切断的原因更容易。也许改天我会花更多的时间在这上面。

于 2012-12-05T06:17:02.820 回答
0

我遇到了完全相同的问题,但是在操作栏上有一个微调器,您需要将您的视图的 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"
    />

于 2014-09-03T14:57:31.350 回答