在Android Spinner中增加项目之间的间距,而不需要自定义样式?

21

我正在为一个混凝土公司编写的Android应用程序中增加打卡功能。在下拉列表中,我使用了一些旋转框来选择工作地点和工种等信息。但我担心旋转框中的选项过于接近,员工很难选择正确的选项。

我希望在旋转框中的选项之间增加一点空间,但不想费力去创建自定义样式,因为实际上我只想让旋转框看起来和默认的一样,并且只需要稍微多一点填充。而制作一个自定义样式需要耗费大量时间。

有没有简单的更改方法,例如设置旋转框的某个属性?我尝试将旋转框类型设置为Dialog,但它只会显示具有相同间距的列表,而不与旋转框控件相关联。

5个回答

28

我相信Pragnani的答案是正确的,但这是我实际上的实现方法...

- 在RES/layout中创建了一个XML布局,其中只有一个文本视图,如下所示。 此文本视图具有我想要的自定义大小/填充。

spinner_row.xml

  <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/cust_view"
        android:minWidth="246dp"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:gravity="left|center_vertical"
        android:textColor="@android:color/black"    
        android:textSize="20sp"
        android:paddingLeft="4dp"
        android:textIsSelectable="false"/>

然后,在我将数据加载到下拉列表中的活动中,当我为下拉列表创建一个ArrayAdapter时,我将自定义的textview作为第二个参数传递给ArrayAdapter构造函数。

Spinner spinClockInWorkSite = (Spinner)findViewById(R.id.spinClockInWorkSite);
ArrayAdapter spinClockInWorkSiteAdapter = new ArrayAdapter(this, R.layout.spinner_row, this.workSiteList);
spinClockInWorkSite.setAdapter(spinClockInWorkSiteAdapter);

现在, spinner 使用我在 spinner_row.xml 中定义的自定义 textview 来显示列表中的每个项。

与调整样式相比,这种方式更符合我的需求。


22

如果您想要提供令人满意的间距,则可以在 Spinner 适配器中轻松使用 "simple_spinner_dropdown_item",而不是所有这些 XML。

例如:

String [] dataList = new String[]{"Select","A","B","C","D","E"};
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_dropdown_item, dataList);
        spinner.setAdapter(dataAdapter);

它对我起作用了。


10
除了回答晚了2年外,这个回答并没有回答实际问题。 - Jim
1
实际上它是有效的,唯一的问题是它也给Spinner本身带来了一些额外的间距。 - Anthony

11

除非你需要非常特定的间距,否则我建议使用其中一个内置布局。

simple_spinner_item = No line space.
simple_spinner_dropdown_item = 1 line space.
simple_dropdown_item_1line = 1.5 line space.

这些和更多可以在R.class中找到


7
尝试这个, 在这里,您不会更改 spinner 样式,但是通过为 Spinner Item 设置样式,可以添加您想要的额外功能。
<style name="spinnerStyle"  parent="@android:style/Widget.TextView.SpinnerItem">
       <item name="android:padding">5sp</item>
    </style>

使用style属性为您的spinner应用样式。

 style="@style/spinnerStyle"

3
我尝试了这个方法,但好像没有任何效果。我把样式放在了 res/values 文件夹下的 styles.xml 文件中,尝试将 padding 值设置为 50,以确保有变化,但仍然没有改变。 - Jim
@Jim 但是样式的父级应该是 android:style/Widget.TextView.SpinnerItem。 - Pragnani
1
我相信这是正确的答案,只是有一个小错误,其中它显示style="@style/spinnerStyleView",但是上面的代码样本中实际上命名为spinnerStyle。我走了另一条路,使用res\layout中仅有textview的XML,并在XML中定义了textview的大小和填充。然后,在创建我的spinner适配器时,我将自定义的textview作为ArrayAdapter构造函数的第二个参数传递,它会为列表中的每个项目使用我的自定义textview。我原以为这将是一件难事,但实际上它非常简单。 - Jim
@Jim,这是一个打字错误,很抱歉...我本来想建议为Spinner提供自定义布局,但既然你要求简单的解决方案,那我就发了这个...请查看我之前的回答,链接在这里:http://stackoverflow.com/questions/15299194/how-to-change-the-text-background-color-of-a-opened-spinner-on-android/15299268#15299268 - Pragnani
是的,实际上我用了你之前的答案来解决问题,但直到现在才注意到是你发布的。非常感谢你的帮助!我会将这个标记为正确答案,并给你两个回答都点赞。谢谢! - Jim
10
我认为这个答案不起作用,它只是给旋转器本身添加填充而不是项目。 - Ahmed Galal

2
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, 
ArrayList);

"R.layout.simple_dropdown_item_1line" 会改变列表视图的样式 @AlexUnger - Govind Maheshwari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接