如何将 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);
我正在做我的第一个 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);