如何将 scrollTo() 与 Spinner 一起使用?

How to use scrollTo() with Spinner?

我正在做我的第一个 Android 项目,这意味着我对 Android 和 Java 不是很熟悉,我想在之后移动 ScrollView 的滚动条用户按下下一步操作的按钮 (IME_ACTION_SEND)。我的代码如下。

activity_add.xml

基本由TextView、EditText、NumberPicker、Spinner、Button组成。我想在 EditText 上 IME_ACTION_SEND 之后移动滚动条,以便 NumberPicker 在屏幕上居中。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/addActivity_scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp">

    <LinearLayout
        android:id="@+id/layout_activity_add"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/title_addItem"
            android:id="@+id/textView"
            android:layout_gravity="center_horizontal"
            android:textSize="40sp" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/formLayout"
            android:layout_marginTop="50dp">

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/title_editText"
                android:layout_centerVertical="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true"
                android:hint="@string/hint_title"
                android:singleLine = "true"
                android:maxLength="20" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/formLayout3"
            android:layout_marginTop="50dp">

            <TextView
                android:id="@+id/period_textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/label_period"
                android:layout_centerHorizontal="true" />

            <NumberPicker
                android:id="@+id/period_number_picker"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/period_textView"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true">
            </NumberPicker>

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/formLayout4"
            android:layout_marginTop="25dp"
            android:layout_marginBottom="25dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/label_category"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_centerInParent="true"
                android:layout_toStartOf="@+id/background_spinner"
                android:layout_toLeftOf="@+id/background_spinner" />

            <Spinner
                android:id="@+id/background_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerInParent="true"
                android:layout_gravity="center_vertical">
            </Spinner>

        </RelativeLayout>

        <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button_submit"
            android:layout_gravity="center_horizontal"
            android:text="@string/label_submit" />

    </LinearLayout>

</ScrollView>

AddItemActivity.java

我刚刚复制了我认为相关的部分。

public class AddSinceItemActivity extends ActionBarActivity {

    EditText title;
    Spinner spinner;
    NumberPicker numberPicker;
    String title_string;
    ViewGroup linearLayout;
    ScrollView addActivity_scrollview;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        addActivity_scrollview = (ScrollView) findViewById(R.id.addActivity_scrollview);
        linearLayout = (ViewGroup) findViewById(R.id.layout_activity_add);
        title = (EditText) findViewById(R.id.title_editText);
        numberPicker = (NumberPicker) findViewById(R.id.period_number_picker);
        spinner = (Spinner) findViewById(R.id.background_spinner);

        /* For title */
        title.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEND) {
                    // I think here is the most important part.
                    addActivity_scrollview.smoothScrollTo(0, numberPicker.getBottom());
                }
                return false;
            }
        });
    }
}

对于addActivity_scrollview.smoothScrollTo(0, numberPicker.getBottom());,

我试过很多可能的代码,比如

addActivity_scrollview.smoothScrollTo(0, spinner.getTop());

addActivity_scrollview.smoothScrollTo(0, 300);(300只是一个随机数)

addActivity_scrollview.smoothScrollBy(0, 300);

但是滚动总是卡住(它移动了一点,但它总是与上述代码相同的位置)并且屏幕几乎没有显示所选的NumberPicker数量。如何实现设置scroll让屏幕显示整个NumberPicker的目的?

我应该将 android:imeOptions="actionSend" 添加到 <EditText> 以便正确收听 onEditorAction()。我认为 android:singLine="true" 没问题,因为该选项启用了键盘上的 "next" 操作。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/title_editText"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:hint="@string/hint_title"
    android:singleLine="true"
    android:maxLength="20"
    android:imeOptions="actionSend" />

只需将此行添加到您在 xml 中的 edittext 代码中:android:imeOptions="actionSend" 然后将其尝试添加到您的 activityaddActivity_scrollview.smoothScrollTo(0, 480);