水平滚动视图的问题会自动在Edittext焦点

时间:2016-05-16 10:00:48

标签: android android-layout horizontalscrollview

我使用的Horizontal Scroll View包含Relative Layout,其中包含6 edittext。所有edittext在视图中水平显示

MyXml.xml

<HorizontalScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:id="@+id/horizontalView">


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
         >


        <!--android:weightSum="6"-->
        <android.support.v7.widget.CardView
 android:id="@+id/sv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
             >

                <EditText
                    android:id="@+id/edt1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:imeOptions="actionNext"
                    android:ems="3"
                    android:inputType="number"
                    android:maxLength="2"
                    android:singleLine="true" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
android:layout_toRightOf="@+id/sv1"
            android:id="@+id/sv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:id="@+id/edt2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:ems="4"
                    android:imeOptions="actionNext"
                    android:inputType="textCapCharacters"
                    android:maxLength="1"
                    android:singleLine="true"
                    android:text="" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            android:layout_toRightOf="@+id/sv2"
            android:id="@+id/sv3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:id="@+id/edt3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:ems="4"
                    android:imeOptions="actionNext"
                    android:inputType="number"
                    android:maxLength="2"
                    android:singleLine="true"
                    android:text="" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
android:layout_toRightOf="@+id/sv3"
            android:id="@+id/sv4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:id="@+id/edt4"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:ems="3"
                    android:imeOptions="actionNext"
                    android:inputType="number"
                    android:maxLength="4"
                    android:singleLine="true"
                    android:text="" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
android:layout_toRightOf="@+id/sv4"
            android:id="@+id/sv5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:id="@+id/edt5"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:ems="5"
                    android:imeOptions="actionNext"
                    android:inputType="number"
                    android:maxLength="1"

                    android:singleLine="true"
                    android:text="" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
android:layout_toRightOf="@+id/sv5"
            android:id="@+id/sv6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           app:cardElevation="2dp"
            app:cardUseCompatPadding="true">

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:id="@+id/edt6"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:hint="hintvalue"
                    android:ems="5"
                    android:inputType="number"
                    android:maxLength="3"
                    android:singleLine="true"
                    android:text="" />
            </android.support.design.widget.TextInputLayout>
        </android.support.v7.widget.CardView>
    </RelativeLayout>

</HorizontalScrollView>

问题:现在每当我点击Edittext(或任何编辑文字)时。 horizontal scrollview会自动滚动到结束位置。我不知道这种行为。为什么水平滚动视图会自动滚动?

我尝试了什么

1)我试图在第一次编辑文本焦点更改时将smoothscroll调用到0,0位置。

 edt1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if(b){
                   hv1.smoothScrollTo(0,0)

                }
            }
        });

2)我还尝试创建一个custom class扩展horizontal scrollview并在onLayout覆盖方法中将位置更改为0

public class HorizontalCustomScrollView extends android.widget.HorizontalScrollView {
    private boolean enableScrolling = true;

    public boolean isEnableScrolling() {
        return enableScrolling;
    }

    public void setEnableScrolling(boolean enableScrolling) {
        this.enableScrolling = enableScrolling;
    }

    public HorizontalCustomScrollView(Context context) {
        super(context);
    }

    public HorizontalCustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HorizontalCustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public HorizontalCustomScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onLayout (boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
         this.scrollTo(0,0);  

    }

}

3)我也尝试在fullScroll覆盖方法中向FOCUS_LEFT指向FOCUS_RIGHT以及onLayout,但这也无效。

@Override
        protected void onLayout (boolean changed, int l, int t, int r, int b) {
            super.onLayout(changed, l, t, r, b);
             //this.scrollTo(0,0);  

   this.fullScroll(HorizontalScrollView.FOCUS_LEFT);

//and also try with Focus right

//this.fullScroll(HorizontalScrollView.FOCUS_RIGHT);


        }

关注焦点

enter image description here

关注编辑文本1(或2,3或任何其他编辑文本后...水平滚动移动到自动上次。)

enter image description here

但仍然水平滚动视图自动滚动到最后位置。我怎么能让它停下来?

1 个答案:

答案 0 :(得分:5)

我可以在这里解决我的问题,但仍然不知道为什么会发生这种情况。

我删除了定义的editext的所有属性,并逐个添加所有属性并检查导致问题的属性,我发现当我再次将gravity="center"属性添加到edittext时水平滚动视图滚动结束。

所以发生这种情况是因为gravitytext = edittext的“center”属性。

但我仍然不知道为什么edittext的引力会直接影响水平滚动视图的奇怪行为。重力是否与父容器的内容视图有某种关系?

如果有人对此行为有任何回答,请分享您的观点。