2014-06-15 127 views
0

我知道这个问题在这里已经被多次询问过,但花了几个小时寻找解决方案后,我找不到一个。Android:更改操作栏上的操作共享项的图标

我的要求很简单,我只是想将操作栏上的共享图标更改为白色。我有白色的drawable,并使用内置的Action Bar。

已尝试在菜单xml中设置图标,但没有奏效。任何帮助,将不胜感激。

<item 
    android:id="@+id/action_share" 
    android:actionProviderClass="android.widget.ShareActionProvider" 
    android:showAsAction="ifRoom" 
    android:icon="@drawable/ic_action_share_white" 
    android:title="@string/action_share"/> 
+0

你的父母主题是什么?如果它已经是一个支持黑暗动作栏('Theme.Holo','Theme.Holo.Light.DarkActionBar'等)的文件,那么它会自动更改。 – ianhanniballake

+0

那么,在这种情况下,将会有一个灰色的可绘制不是白色的。 – Prashant

回答

0

看看在ShareActionProvideronCreateActionView()方法:

public View onCreateActionView() { 
    // Create the view and set its data model. 
    ... 

    // Lookup and set the expand action icon. 
    TypedValue outTypedValue = new TypedValue(); 
    mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true); 
    Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId); 
    ... 

所以,要改变这种形象,它看起来像你应该改变的actionModeShareDrawable对于应用的主题值。不幸的是,这个属性似乎没有在框架中公开(尽管如果使用AppCompat或者ActionBarSherlock它)。

如果您不使用这些库,可能的解决方案是创建ShareActionProvider的子类并重新实现onCreateActionView()方法(尽管您必须复制其代码以及可能使用的资源)。

+0

它没有为我工作。出现以下错误... 错误:错误:找不到与给定名称相匹配的资源:attr'actionModeShareDrawable'。 我觉得这个属性是不公开的。 – Prashant

+0

看起来你是对的。它似乎是公开的appcompat-v7,但不是在标准的R.attr。可惜。那么,你总是可以从ShareActionProvider派生一个类,并重写'onCreateActionView()',但它并不那么干净。 – matiash

+0

@Prashant编辑了这个答案。这不是很好,但它应该工作。 – matiash