android - 如何在小部件右侧创建没有向下三角形的android微调器

标签 android android-layout spinner nine-patch

我有一个屏幕,用户需要输入许多项目,因此屏幕空间非常宝贵。

我希望小部件在屏幕上的外观(在用户按下它之前)类似于 EditText 或 Spinner 小部件的左侧部分(没有正常的向下三角形)在 Spinner 的右侧。然后当用户按下小部件时,他/她将获得正常的 Spinner 选择对话框。

我可以更改一些 Spinner 样式属性来完成此操作吗?

我一直没能看到这样的代码。

谢谢

最佳答案

这是一个很老的问题,但我认为仍然相关,所以这是我的答案:

最简单的方法

lencinhaus 的答案是正确的。它可以工作,但可以以更简单的方式完成:只需为其添加另一个背景。下面的示例使用标准 Button 背景以获得更均匀的外观:

<Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:prompt="@string/my_prompt" 
    android:background="@android:drawable/btn_default"
    />       

另一个答案中使用的样式只不过是为小部件应用背景。这可以直接在小部件上完成,无需新的 xml 文件。当然,如果您无论如何都要将样式应用于微调器,那么这种方法没有任何问题。

为什么?

了解其工作原理的关键在于对 9-patch PNG 的描述。右侧和底部的线用于填充,即保持一些空间不被其内容使用。在这种情况下,里面的文字。标准 Spinner 背景使用右侧带有箭头的图像,该箭头位于可用文本区域之外。参见下图 1 的说明:

Figure 1. Original Spinner bacground 9-patch PNG http://tinypic.com/images/404.gif
图 1. 原始 Spinner bacground 9-patch PNG。

仅移除箭头是不够的,因为填充仍然存在。您需要使用具有减少填充的新 9 补丁图像(参见图 2 中基于图 1 的示例)或使用没有太多填充的预编译 9 补丁图像之一,例如 的图像EditText (@android:drawable/edit_text) 或 Button (@android:drawable/btn_default)。

Figure 2. Modified Spinner bacground 9-patch PNG with reduced padding
图 2. 修改后的 Spinner bacground 9-patch PNG,内边距减少。

了解这一点后,您就可以为 Spinner(事实上,为任何小部件)创建自己的背景。

对 9 个补丁文件的更好解释 can be found here

使用 SDK (read about it here) 中的 draw9patch 可执行文件创建文件非常容易,但没有什么能阻止您使用 PhotoshopGimp 代替。请记住,9-patch PNG 只是普通的 PNG!唯一需要注意的是确保您只绘制像素的外线,并且其余像素是完全透明的。 靠近边界的抗锯齿可能会产生意想不到的结果。

关于android - 如何在小部件右侧创建没有向下三角形的android微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058360/

相关文章:

android - Spinner 默认主题到 EditText android

java - 我的 android webview 有问题

android - 单行填充父级ListView高度

android - 如何使用 Android sdk 在浏览器中创建编程书签?

android - 居中布局安卓

java - 如何在没有标签的情况下获取微调值

Android OpenCV 3.1 从文件加载 SVM 分类器

android - 显示安卓 :hint only in Extract UI mode

android,在列表项中显示箭头图标

android - Android 4.x 微调器中不再有提示了吗?