单击edittext时自动滚动

问题描述 投票:1回答:4

当用户点击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;
        }
    });
android scrollview ontouchlistener
4个回答
6
投票

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

为了让EditTextScrollView完成其滚动后获得焦点,你可以将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;
        }
    }
);

0
投票

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

 final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollview);
            et_space.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    scrollView.smoothScrollTo(0, 500);
                    scrollView.post(new Runnable() {
                        @Override
                        public void run() {
                            et_space.requestFocus();

                        }
                    });
                    return false;
                }
            });

0
投票

首先我想说你必须使用“OnFocus Listener”然后你必须像这样使用Handler;

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

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);
            }
        });

0
投票

在onCreate方法上使用这行代码。单击EditText时,它会自动滚动:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
© www.soinside.com 2019 - 2024. All rights reserved.