我有近20个输入字段,我放在scrollview中。我底部有按钮。我需要验证字段。如果第一个字段为空,而当按钮位于最底部时,我需要将页面自动移动到第一个edittext。但 我无法专注于特定的edittext来移动滚动。
我尝试了很多方法,但仍然无法正常工作。
这是xml结构和java代码。我使用include来合并xml" common_registration_update"在scrollview中。
main.xml中:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/reg_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/topLayoutId"
layout="@layout/top_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
/>
<RelativeLayout
android:id="@+id/navigation_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/registration_nav_bar_height"
android:layout_below="@+id/topLayoutId"
android:background="@color/colorGrey"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/nav_bar_registration_txt_mrg_left"
android:text="@string/registration"
android:textColor="?attr/colorUserGroup"
android:textSize="@dimen/gps_txt_size" />
<TextView
android:id="@+id/approve"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/nav_bar_status_txt"
android:text="@string/approval_status"
android:textColor="@color/colorBlack"
android:textSize="@dimen/gps_txt_size" />
</RelativeLayout>
<LinearLayout
android:id="@+id/info_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/navigation_bar"
android:layout_marginTop="@dimen/info_icon_mrg_top"
android:orientation="horizontal">
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="@dimen/common_ribbon_icon_size"
android:layout_height="@dimen/common_ribbon_icon_size"
android:layout_marginRight="@dimen/info_icon_mrg_right"
android:id="@+id/infoBtn"
android:background="@drawable/ic_info_3" />
</LinearLayout>
<include
android:id="@+id/retailer_form_new4"
layout="@layout/common_registration_update"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/info_layout" />
</RelativeLayout>
</ScrollView>
您可以在上面的布局中看到我使用的包含。 &#34; common_registration_update&#34;
这个common_registration_update.xml有,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/retail_profil"
android:layout_width="165dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/form_mrg_left"
android:layout_weight="0.01"
android:text="Profile Toko"
android:textColor="@color/colorBlack"
android:textSize="@dimen/help_medium2text"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/retailer_form"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/retail_profil"
android:orientation="horizontal"
android:weightSum="2">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/form_mrg_left"
android:orientation="vertical">
<!--<TextView
android:layout_width="165dp"
android:layout_height="wrap_content"
android:textSize="@dimen/help_medium2text"
android:textColor="?attr/colorUserGroup"
android:text="@string/retailer_profile"
android:layout_weight="0.01" />-->
<TextView
android:id="@+id/reg_static_nama_toko"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/retail_mrg_top"
android:text="@string/retailer_name1"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_nama_pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/tst_view_mrg_top"
android:text="@string/retailer_nama_pic"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_alamat_toko"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/tst_view_mrg_top"
android:text="@string/alamat_toco"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_tipe_toko"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:text="@string/retailer_type1"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_trx1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/tst_view_mrg_top"
android:text="@string/trx1"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_trx2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/tst_view_mrg_top"
android:text="@string/trx2"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_trx3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/tst_view_mrg_top"
android:text="@string/trx3"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/reg_static_trx4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="19dp"
android:text="@string/trx4"
android:textColor="@color/colorBlack" />
</LinearLayout>
<LinearLayout
android:layout_width="205dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="@dimen/form_mrg_left"
android:layout_marginTop="21dp"
android:layout_weight="1.5"
android:orientation="vertical">
<EditText
android:id="@+id/store_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/input_field_style"
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz0123456789"
android:hint="Nama toko"
android:inputType="textNoSuggestions"
android:maxLength="30"
android:maxLines="1"
android:padding="@dimen/input_padding"
android:textColor="@color/colorBlack"
android:textSize="@dimen/help_medium1text" />
<EditText
android:id="@+id/pic_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/input_mrg_top"
android:background="@drawable/input_field_style"
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"
android:hint="@string/pichint"
android:maxLength="50"
android:maxLines="1"
android:padding="@dimen/input_padding"
android:textColor="@color/colorBlack"
android:textSize="@dimen/help_medium1text" />
<//this goes like 20 fields>
</LinearLayout>
<RelativeLayout>
在代码中,
我使用父卷轴视图ID来引用特定的edittext ..
例如:
mStoreName是edittext对象,mScrollView是ScrollView对象,
mStoreName = (EditText) findViewById(R.id.store_name);
mScrollview = (ScrollView) findViewById(R.id.reg_scroll_view); //parent scrollview
if (checkKeyExists("store_name") && TextUtils.isEmpty(mStoreName.getText())) {
showToastErrMsg("Please enter StoreName", mStoreName);
}
public void showToastErrMsg(String Msg, final View inputTextField) {
final Dialog dialog = new Dialog(RetailerRegistrationActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.registration_err_modal);
Button ok = (Button) dialog.findViewById(R.id.ok_button);
TextView textView = (TextView) dialog.findViewById(R.id.response);
textView.setText(Msg);
dialog.setCancelable(false);
dialog.show();
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
//here redirecting to scroll to specific edittext but it's not working.
//mScrollview.scrollTo(0, inputTextField.getScrollY());
//mScrollview.pageScroll(inputTextField.FOCUS_UP);
// mScrollview.scrollTo(0,inputTextField.getScrollY());
// mScrollview.smoothScrollTo(0,500);
mScrollview.scrollTo(0,inputTextField.getBottom());
dialog.dismiss();
inputTextField.requestFocus();
// scrollToView(mScrollview,inputTextField);
}
});
}
});
}
我尝试了所有注释行,专注于要移动的edittext,但它没有移动到光标位于edittext中的特定位置。
答案 0 :(得分:0)
你的代码对我来说似乎完全没问题。 有时android工作室很奇怪。 只是尝试清理和重建。如果没有,关闭工作室并重新启动。 很多时候这个解决方案有效!!
变形例 -
final InputMethodManager inputMethodManager =(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
将 requestFocus()放在onClickListener()
之后的这些行