【问题标题】:How to use scrollTo() with Spinner?如何将 scrollTo() 与 Spinner 一起使用?
【发布时间】:2015-01-27 12:08:26
【问题描述】:

我正在开发我的第一个 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 数量。如何实现设置滚动以使屏幕显示整个 NumberPicker 的目标?

【问题讨论】:

    标签: java android android-scrollview numberpicker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我应该将android:imeOptions="actionSend" 添加到&lt;EditText&gt; 以便正确收听onEditorAction()。我认为android:singLine="true" 可以,因为该选项启用了键盘上的“下一步”操作。

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

      【讨论】:

      • 如果您想要软键盘中的下一个按钮,您也可以尝试使用此 IME_ACTION_NEXT。如果您的问题已解决,请接受答案,但请记住,您还必须在中定义 android:imeOptions="actionNext"编辑文本。
      • @user2455320 非常感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多