【发布时间】:2013-08-28 20:05:16
【问题描述】:
假设这是Spinner,你如何设置默认图标?
目前,我的只显示第一项(蓝牙)的图标
【问题讨论】:
-
我更新了我的答案,以防它对你有任何帮助
假设这是Spinner,你如何设置默认图标?
目前,我的只显示第一项(蓝牙)的图标
【问题讨论】:
我相信具体的例子是ShareActionProvider,它是ActionProvider的特殊子类
如果您在 xml 中为您的菜单添加 ActionProvider,您可以将其视为菜单项并添加图标。
来自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" />
由于我没有使用过这些,我不知道是否所有ActionProviders 都有旋转角三角形...我猜是的?
更新:
我只是在想SpinnerAdapter 的工作原理,还有另一种方法可以做到这一点。如果您在 Spinner 中使用 SpinnerAdapter 的自定义子类,它将有 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 就会为我们添加微调器三角形。它没有。
其次,事实证明 Google 是在作弊并违反了他们自己的 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 时,您需要记住 ActionBar with AppCompat actionBarItemBackground not working。
【讨论】:
我用一个 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"
/>
【讨论】: