【问题标题】:Setting a custom share icon on Actionbar ShareActionProvider without ActionBarSherlock在没有 ActionBarSherlock 的 Actionbar ShareActionProvider 上设置自定义共享图标
【发布时间】:2014-02-18 02:41:09
【问题描述】:

我遇到了与这里描述的相同的问题 - Setting a custom share icon on Actionbar ShareActionProvider

但是我没有使用 ActionBarSherlock
我发现 Sherlock 主题使用了“actionModeShareDrawable”,我也可以这样使用,如果我不使用ActionBarSherlock

<style name="Theme.MyApp" parent="android:Theme.Holo">
    <item name="*android:actionModeShareDrawable">@drawable/icon</item>
</style>

这在我的 nexus 5 上运行良好,但在许多其他设备上失败
所以我的问题是,如何在不使用 ActionBarSherlock 的情况下更改该图标

【问题讨论】:

  • 你能解决这个问题吗?我有同样的问题。
  • 您找到解决方案了吗?

标签: android android-actionbar android-xml android-icons android-actionmode


【解决方案1】:

你可以像这样在菜单中使用

menu.xml

<item android:id="@+id/menu_share"
        android:title="@string/share"
         app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
         app:showAsAction="always"
         android:orderInCategory="100"/>

如果 api>21 android:actionModeShareDrawable 则进入您的设置图标,否则为 actionModeShareDrawable

样式.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ....
    <item name="actionModeShareDrawable">@drawable/share</item>
</style>

在最后应用这个主题

manifest.xml

 <application
     ...
     android:theme="@style/AppTheme" >

【讨论】:

    【解决方案2】:

    我喜欢 PrplRugby 的回答,但您必须在您的应用中包含 ActivityChooserView。我重构为使用反射,你可以在这里找到:https://gist.github.com/briangriffey/11185716

    【讨论】:

      【解决方案3】:

      您可以继承 ShareActionProvider,只覆盖构造函数和 createActionView()。

      从这里,您可以从 super 获取 View,将其投射到 ActivityChooserView 以便您可以调用 setExpandActivityOverflowButtonDrawable(Drawable) 改变图标。

      package com.yourpackagename.whatever;
      
      import android.content.Context;
      import android.graphics.drawable.Drawable;
      import android.support.v7.internal.widget.ActivityChooserView;
      import android.support.v7.widget.ShareActionProvider;
      import android.view.View;
      
      import com.yourpackagename.R;
      
      public class CustomShareActionProvider extends ShareActionProvider {
      
          private final Context mContext;
      
          public CustomShareActionProvider(Context context) {
              super(context);
              mContext = context;
          }
      
          @Override
          public View onCreateActionView() {
              ActivityChooserView chooserView =
                  (ActivityChooserView) super.onCreateActionView();
      
              // Set your drawable here
              Drawable icon =
                  mContext.getResources().getDrawable(R.drawable.ic_action_share);
      
              chooserView.setExpandActivityOverflowButtonDrawable(icon);
      
              return chooserView;
          }
      }
      

      【讨论】:

        【解决方案4】:

        我知道这不在主题中,但我在 menu.xml 中设置了我的共享图标。如果您只是想拥有一个自定义图标,这可能会有所帮助。

        <menu xmlns:android="http://schemas.android.com/apk/res/android" >
            <item android:id="@+id/share" android:showAsAction="always" android:title="@string/share" android:icon="@drawable/ic_menu_share"/>
        </menu>
        

        我很惊讶它完全有效。尝试将 actionModeShareDrawalbe 更改为 actionModeShareDrawable。

        <style name="Theme.MyApp" parent="android:Theme.Holo">
            <item name="android:actionModeShareDrawable">@drawable/icon</item>
        </style>
        

        【讨论】:

        • 抱歉,这只是一次点击失误,当然我有drawable,而不是drawalbe :D
        • 如果您在菜单中使用 ShareActionProvider,这将不起作用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多