gpt4 book ai didi

android - 使用 MenuItem.setActionView 在 ActionBarSherlock 中保留默认的 selectableItemBackground

转载 作者:太空狗 更新时间:2023-10-29 14:25:37 27 4
gpt4 key购买 nike

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

Media Controls with Correct Background

我使用 MenuItem.setActionView 来覆盖快进和快退按钮的默认 View ,因为我需要检测用户最初触摸控件(开始快退)和随后释放控件(完成快退)的时间。见下面的代码:

            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 的高度以尝试填充 ActionBar
  • 从 onTouch 处理程序返回 True 或 False

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

最佳答案

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

You end up with something like this

首先,我在名为 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" >

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

关于android - 使用 MenuItem.setActionView 在 ActionBarSherlock 中保留默认的 selectableItemBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com