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

Mik*_*ike 42 android spinner nine-patch android-layout

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

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

是否有一些Spinner样式属性我可以更改以实现此目的?

我无法看到这样的代码.

谢谢

Ale*_*dam 67

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

最简单的方法

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"
    />       
Run Code Online (Sandbox Code Playgroud)

在另一个答案中使用的syle只不过是在窗口小部件中应用背景.这可以直接完成到窗口小部件,从而节省了对新的xml文件的需求.当然,如果您打算将样式应用于微调器,那么这种方法没有任何问题.

为什么?

了解其工作原理的关键在于9补丁PNG的描述.右侧和底部的线用于填充,即,以防止其内容使用一些空间.在这种情况下,文本里面.标准的微调器背景使用右侧带有箭头的图像,该图像位于可用文本区域之外.有关说明,请参见下面的图1:

图1.原始Spinner bacground 9-patch PNG http://i56.tinypic.com/3026kw4.png
图1.原始Spinnerbacground 9-patch PNG.

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

图2.修改后的Spinner bacground 9-patch PNG减少填充http://i52.tinypic.com/2jfaxkw.png
图2.修改后的Spinnerbacground 9-patch PNG减少了填充.

理解这一点将允许您为Spinner(并且实际上对于任何小部件)创建自己的背景.

可以在此处找到有关9补丁文件的更好解释

使用SDK中的draw9patch可执行文件创建文件非常容易(在此处阅读),但没有什么能阻止您使用PhotoshopGimp.请记住,9补丁PNG只是普通的PNG!唯一需要注意的是确保只绘制像素的外线,其余像素完全透明.靠近边界的抗锯齿可能会产生意想不到的结果.


len*_*aus 40

你可以做的一件事是Spinner从Android代码库获取源代码,连同相关的布局和资源,并使用它们来创建自己的自定义小部件(可能你只需要从布局中删除箭头并调整代码很少取决于你的需求).

编辑:你是对的,按照那篇文章它实际上非常简单:)你必须做两件事.首先,在res/values下创建一个styles.xml文件,打开它并添加以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style parent="@android:style/Widget.Spinner" name="SpinnerAsEditText">
        <item name="android:background">@android:drawable/edit_text</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

接下来,在您的布局中,添加Spinner,如下所示:

<Spinner style="@style/SpinnerAsEditText" anyOtherAttributeYouNeed="..."></Spinner>
Run Code Online (Sandbox Code Playgroud)

就是这样,现在微调器看起来就像一个简单的EditText,没有那个无用且恼人的向下箭头.


pva*_*lle 15

我刚到这个问题,因为我的微调器没有显示三角形指示器,现在我理解为什么:我将背景设置为"白色":

android:background="#FFFFFFFF"
Run Code Online (Sandbox Code Playgroud)

这将删除三角形指示器(由Aleadam指定的微调器背景图像和填充).

对于我的问题,我解决了添加父LinearLayout只是为了将背景设置为"白色".


Kai*_*ang 8

给它一个背景,箭头就会消失.

android:background="@drawable/bg"
Run Code Online (Sandbox Code Playgroud)