如何在 NumberPicker 中引用 EditText?

How to reference the EditText inside a NumberPicker?

我需要在 NumberPicker 中获取对 EditText 的引用。我知道这将是选择器视图本身的某种 findViewById,但我无法找到 android 的 ID:

final NumberPicker numberPicker = (NumberPicker) view.findViewById(R.id.numberpicker);
EditText numberPickerEditText = (EditText) numberPicker.findViewById(WHAT IS THE ID???)

我知道 NumberPicker 具有大多数有用的值等方法,但我需要一些更精细的控制,例如在选择器打开时显示键盘,我认为如果不参考EditText 本身(如果我在这方面有误,请随时纠正我!)

如果您查看 NumberPicker 使用的 xml 文件,您会发现您要查找的 EditTextidnumberpicker_input :

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageButton android:id="@+id/increment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/numberpicker_up_btn"
        android:paddingTop="22dip"
        android:paddingBottom="22dip"
        android:contentDescription="@string/number_picker_increment_button" />

    <EditText
        android:id="@+id/numberpicker_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.Large.Inverse.NumberPickerInputText"
        android:gravity="center"
        android:singleLine="true"
        android:background="@drawable/numberpicker_input" />

    <ImageButton android:id="@+id/decrement"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/numberpicker_down_btn"
        android:paddingTop="22dip"
        android:paddingBottom="22dip"
        android:contentDescription="@string/number_picker_decrement_button" />

</merge>

因此,您可以使用相同的 id:

NumberPicker numberPicker = (NumberPicker) view.findViewById(R.id.numberpicker);
EditText numberPickerEditText = (EditText) numberPicker.findViewById(R.id.numberpicker_input)

编辑

好的,看来这个 idandroid.internal.id 里面,因为它是一个系统 ID,要访问它你必须这样做:

numberPicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android"))

您可以在不参考编辑文本的情况下显示软键盘

getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

您必须创建一个视图并将其扩充

View yourView = li.inflate(R.layout.your_view, null);

之后必须将您的 editText 初始化为:

EditText yourEditText = (EditText) yourView.findViewById(R.id.text_symbol);

它肯定会起作用...试一试,如果它对你有用,请告诉我 快乐编码兄弟 :)