当用户点击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;
}
});
从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;
}
}
);
不幸的是输出程序仍然需要双击滚动
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;
}
});
首先我想说你必须使用“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);
}
});
在onCreate方法上使用这行代码。单击EditText时,它会自动滚动:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);