简体   繁体   中英

How to use scrollTo() with Spinner?

I'm working on my first Android project, which means that I'm not that familiar with Android and Java, and I want to move scroll of ScrollView after a user presses the button for next action ( IME_ACTION_SEND ). My codes are as follows.

activity_add.xml

It basically consists of TextView, EditText, NumberPicker, Spinner, Button. I want to move the scroll after IME_ACTION_SEND on EditText, so that the NumberPicker is centered on the screen.

<?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

I've just copied the part which I think is relevant.

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;
            }
        });
    }
}

For addActivity_scrollview.smoothScrollTo(0, numberPicker.getBottom()); ,

I've tried many possible codes, such as

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

addActivity_scrollview.smoothScrollTo(0, 300); (300 is just a random number)

addActivity_scrollview.smoothScrollBy(0, 300);

but the scroll is always stuck (it moves a little but it's always the same position with above codes) and the screen barely shows the selected number of NumberPicker. How can I achieve the goal to set scroll so that the screen shows the entire NumberPicker?

I should've added android:imeOptions="actionSend" to <EditText> in order to properly listen on onEditorAction() . I thought it'd be okay with android:singLine="true" because that option enabled "next" action on keyboard.

<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" ,然后将其尝试到您的活动中addActivity_scrollview.smoothScrollTo(0, 480);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM