此代码帮助我在单击功能上自动滚动,但是当单击编辑文本 4 时,它只会向上滚动上面的一个字段。我希望该字段位于屏幕顶部。我使用了向上滚动、滚动、滚动到,但所有的结果都是一样的。你能帮忙吗。
package com.example.scrollview;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.EditText;
import android.widget.ScrollView;
public class MainActivity extends Activity{
EditText edtText4,edtText8;
ScrollView scrollView;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollView = (ScrollView)findViewById(R.id.scv);
edtText4 = (EditText)findViewById(R.id.editText4);
edtText8 = (EditText)findViewById(R.id.editText8);
edtText4.setOnTouchListener(selectedFieldTouchListener);
edtText8.setOnTouchListener(selectedFieldTouchListener);
}
private OnTouchListener selectedFieldTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int top1 = 0;
switch (v.getId()) {
case R.id.editText4:
top1 = edtText4.getTop();
break;
case R.id.editText8:
top1 = edtText8.getTop();
break;
}
final int top = top1;
scrollView.postDelayed(new Runnable() {//must be in postDelayed otherwise wont work
@Override
public void run() {
scrollView.scrollTo(0, edtText4.getTop());
}
}, 100);
return false;
}
};
最佳答案
这假设 EditTexts
是 ScrollView
的直接子级
private OnTouchListener selectedFieldTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int top1 = 0;
switch (v.getId()) {
case R.id.editText4:
top1 = edtText4.getTop();
break;
case R.id.editText8:
top1 = edtText8.getTop();
break;
}
final int top = top1;
scrollView.postDelayed(new Runnable() {//must be in postDelayed otherwise wont work
@Override
public void run() {
scrollView.scrollTo(0, top);
}
}, 100);
return false;
}
};
然后将Touch Listener
添加到您的EditTexts
edtText4.setOnTouchListener(selectedFieldTouchListener);
edtText8.setOnTouchListener(selectedFieldTouchListener);
关于android - ScrollView 在 android 中的特定字段后自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24384889/