当用户点击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;
}
});
答案 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);