首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用selectableItemBackground在ActionBarSherlock中保留默认的MenuItem.setActionView

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

Stack Overflow用户
提问于 2012-10-17 03:54:27
回答 2查看 1.1K关注 0票数 3

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

我使用MenuItem.setActionView覆盖“快速前进”和“回退”按钮的默认视图,因为我需要检测用户最初接触控件的时间(开始回绕),然后释放控件(以完成回退)。见下面的代码:

代码语言:javascript
运行
复制
            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处理程序返回真假

有人知道我该怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 06:17:02

我想出了一个解决办法,就是在选择项目时,将所有项目的背景设置为一个小的径向梯度。梯度仍然被稍微切断,但很难被注意到。它使自定义按钮和常规按钮看起来几乎相同。

首先,我在一个名为res/drawable/Radialbackound.xml的文件中创建了径向梯度。请注意,结束颜色是透明的,这是很重要的,使渐变为零,这样它就不会填充整个矩形。

代码语言:javascript
运行
复制
<?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的。

代码语言:javascript
运行
复制
<?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的背景分配了可声明的状态:

代码语言:javascript
运行
复制
rewindButton.setBackgroundResource(R.drawable.actionitembackground);

然后,我修改了actionbar的样式,将这个新的径向填充包含在常规操作栏项中。

因此,在value/styes.xml中,我添加了:

代码语言:javascript
运行
复制
<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中将该样式设置为应用程序的样式。

代码语言:javascript
运行
复制
<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyTheme" 
        android:uiOptions="splitActionBarWhenNarrow" >

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-03 14:57:31

我也遇到了同样的问题,但是在操作栏上有一个旋转器,您需要将yout视图的de minHeight设置为actionBar高度:

代码语言:javascript
运行
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12926864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档