单击edittext时自动滚动

时间:2015-12-15 20:03:21

标签: android scrollview ontouchlistener

当用户点击edittext时,我希望屏幕滚动以在屏幕中间显示edittext。所以我试着听一下touch(setOnTouchListener,也尝试了onClick和onFocuse),然后使用smoothScrollTo屏幕将edittext放在屏幕中间。

但出于某种原因,当我将setOnTouchListener添加到edittext时,它根本没有获得焦点。

我需要修理什么?或者我怎样才能做到这一点?

这是setOnTouchListener代码,导致edittext在单击时不会聚焦:

    et_email.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ScrollView scrollView = (ScrollView)getView().findViewById(R.id.ScrollViewSendDetails);
            scrollView.smoothScrollTo(0, et_email.getBottom());
            return true;
        }
    });

4 个答案:

答案 0 :(得分:6)

true方法返回onTouch()表示触摸事件正在那里消耗。要允许事件传播到View自己的触摸侦听器,您需要return false;

要在EditText完成滚动后让ScrollView获得焦点,您可以将Runnable发布到ScrollView的处理程序,以请求关注EditText。例如:

et_email.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ...
            scrollView.smoothScrollTo(0, et_email.getTop());
            scrollView.post(new Runnable() {
                    @Override
                    public void run() {
                        et_email.requestFocus();
                    }
                }
            );
            return false;
        }
    }
);

答案 1 :(得分:0)

不幸的是输出程序仍然需要双击才能滚动

<fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />

答案 2 :(得分:0)

首先我想说你必须使用&#34; OnFocusListener&#34;然后你必须像这样使用Handler;

现在,当我点击我的edittext时;键盘打开,滚动视图同时滚动到顶部:))

et_space.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                final Handler handler;
                handler = new Handler();

                final Runnable r = new Runnable() {
                    public void run() {
                        scrollView.smoothScrollTo(0, 500);
                        handler.postDelayed(this, 200);
                    }
                };
                handler.postDelayed(r, 200);
            }
        });

答案 3 :(得分:0)

在onCreate方法上使用以下代码行。当您单击EditText:

时,它会自动滚动
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);