滚动不能专注于特定的edittext android

时间:2018-04-05 05:27:33

标签: android android-layout android-edittext android-scrollview

我有近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中的特定位置。

1 个答案:

答案 0 :(得分:0)

你的代码对我来说似乎完全没问题。 有时android工作室很奇怪。 只是尝试清理和重建。如果没有,关闭工作室并重新启动。 很多时候这个解决方案有效!!

变形例 -

final InputMethodManager inputMethodManager =(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);                         inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

requestFocus()放在onClickListener()

之后的这些行