如何在Spinner中使用scrollTo()?

时间:2015-01-27 12:08:27

标签: java android android-scrollview numberpicker

我正在开发我的第一个Android项目,这意味着我对Android和Java并不熟悉,我想在用户按下按钮进行下一步操作后移动ScrollView的滚动({ {1}})。我的代码如下。

activity_add.xml

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

IME_ACTION_SEND

AddItemActivity.java

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

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

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());(300只是一个随机数)

addActivity_scrollview.smoothScrollTo(0, 300);

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

2 个答案:

答案 0 :(得分:1)

我应该android:imeOptions="actionSend"添加<EditText>以便正确收听onEditorAction()。我认为android:singLine="true"没关系,因为该选项已启用&#34; next&#34;键盘上的动作。

<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" />

答案 1 :(得分:1)

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