我有一个屏幕,用户需要输入许多项目,因此屏幕空间非常宝贵。
我希望小部件在屏幕上的外观(在用户按下它之前)类似于 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
)。
图 2. 修改后的 Spinner
bacground 9-patch PNG,内边距减少。
了解这一点后,您就可以为 Spinner
(事实上,为任何小部件)创建自己的背景。
对 9 个补丁文件的更好解释 can be found here
使用 SDK (read about it here) 中的 draw9patch 可执行文件创建文件非常容易,但没有什么能阻止您使用 Photoshop 或 Gimp 代替。请记住,9-patch PNG 只是普通的 PNG!唯一需要注意的是确保您只绘制像素的外线,并且其余像素是完全透明的。 靠近边界的抗锯齿可能会产生意想不到的结果。
关于android - 如何在小部件右侧创建没有向下三角形的android微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058360/