假设这是一个Spinner
,你如何设置默认图标?
目前,我的只显示第一项(蓝牙)的图标
我相信具体的例子是 a ShareActionProvider
,它是一个特殊的子类ActionProvider
如果要ActionProvider
在 xml 中为菜单添加一个,则可以将其视为菜单项并添加图标。
从ActionProvider
文档:
<item android:id="@+id/my_menu_item"
android:title="Title"
android:icon="@drawable/my_menu_item_icon"
android:showAsAction="ifRoom"
android:actionProviderClass="foo.bar.SomeActionProvider" />
由于我没有使用过这些,所以我不知道是否所有ActionProvider
s 都有旋转角三角形......我的猜测是肯定的?
更新:
我只是在考虑如何SpinnerAdapter
工作,还有另一种方法可以做到这一点。如果您在其中使用自定义子类,SpinnerAdapter
它将Spinner
有 2 种方法,您可以执行以下操作:
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
// return the view to display when you are looking at the dropdown,
// so this will probably be a TextView and/or an ImageView
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// This will show when the item at the provided position is
// selected. At this point you could return the ImageView you want to
// always appear at the top, such as the share icon.
}
今天浪费了时间,所以我想我会提供正确的答案,即使这个线程似乎已经死了。
首先,正如@Jon 所做的那样,我曾怀疑仅仅调用神奇的神秘 ActionProvider 会为我们添加微调器三角形。它不是。
其次,事实证明谷歌正在欺骗并违反他们自己的 ActionBar 图标准则来实现这一点。如果您查看http://androiddrawables.com/Menu.html,您会发现共享图标的角落里专门有一个类似微调器的三角形。
本质上,这意味着你的主要假设——它是一个Spinner
——是错误的。它只是一个被黑客攻击的按钮,看起来像一个微调器。
因此,您可以根据需要创建自己的自定义图标,只需按照通常的说明指定 ActionBar 按钮图标 ( http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems )。如果你像我一样有文本按钮,那是行不通的。
我最终所做的涉及利用支持库中可用的一些微调器背景九个补丁文件,以及添加到应用于相关按钮的样式的属性“actionBarItemBackground”。
<item name="android:actionBarItemBackground" tools:ignore="NewApi">@drawable/abc_spinner_ab_default_holo_light</item>
<item name="actionBarItemBackground">@drawable/abc_spinner_ab_default_holo_light</item>
在尝试此 hack 时,您需要记住带有 AppCompat actionBarItemBackground 的 ActionBar 不起作用。
我用一个 hack “解决”了这个问题,它ImageView
把Spinner
.
<Spinner
android:layout_width="40dp"
android:layout_height="40dp"
/>
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_share"
android:adjustViewBounds="true"
android:background="@color/same_as_parent_background"
/>