在安卓中,有没有类似于iOS中UIPickerView的替代品?

7

我正在尝试在安卓系统中复制IOS的UIPickerView功能。

在IOS中,您可以将UIPickerView设置为键盘的输入类型。我需要在Android中实现相同类型的交互。
更新: 当我说输入类型时,我的意思是UIPickerView仅替换键盘视图。因此,如果单击文本字段,则UIPickerView将打开,而不是键盘。希望这能澄清问题!

你不需要在这里设置输入视图.. 你可以打开一个带有时间选择器的DialogFragment。 - Shubhank
好的,那很有道理。但是我可以用除时间以外的不同值填充时间选择器吗?例如,我想在左边存储英尺,在右边存储英寸。这是否适用于TimePickerDialog? - T Race
你可能需要在这里使用旋转器。 - Shubhank
3个回答

2

我不确定你所说的“作为键盘的输入类型”确切含义是什么。

但在安卓中,相当于该图片的是TimePickerDialog

更新:

如果您需要此类选择器的UI,则有三种选择:TimePicker、DatePicker或NumberPicker。显然前两个不符合要求,因此只能使用NumberPicker。使用NumberPicker,您可以填充所需数字(英寸),然后再填充另一个数字(英尺)。

我建议您快速查看Pickers文章:https://developer.android.com/guide/topics/ui/controls/pickers.html


0
我建议使用多个选择器来创建布局,这样您就可以拥有所需的任意数量并初始化它们所需的任何值。
下面的布局将为您提供两个旋转器,类似于iOS UIPickerView。
我在底部发布了我的github存储库链接,其中包含一个简单的示例,展示如何使用3个旋转器,一个用于分钟,一个用于小时和一个用于天数,这应该能帮助您(或其他从iOS转移而来的人)作为起点开始。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:id="@+id/multispinner">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"/>

        <Spinner
            android:id="@+id/spinner2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="5dp" />

    </LinearLayout>

</LinearLayout>

我的简单多选器示例


0

如果你想要类似的感觉,可以使用数字选择器。只需确保添加个性化样式作为主题(否则它将采用您的应用程序主题作为默认值),并向数字选择器添加格式化程序。在第一次呈现时,您可能会遇到一些问题(它不会显示第一个值,直到您滚动),只需使用此处提供的解决方案: Android NumberPicker with Formatter doesn't format on first rendering

您还可以像图像中那样将其放入卡片视图中,这看起来足够整洁。 formatted number picker screenshot

附:实际上,您可以修改多个字段,但必须访问类字段/方法。要这样做,请按照此示例代码操作。

public void setNumberPickerDivider (NumberPicker picker) {
    Field[] fields = NumberPicker.class.getDeclaredFields();
    for(Field f:fields){
        if(f.getName().equals("mSelectionDividerHeight")){
            f.setAccessible(true);
            try {
                f.set(picker,1);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            break;
        }
    }
}

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