android - ScrollView 在 android 中的特定字段后自动滚动

标签 android scrollview

此代码帮助我在单击功能上自动滚动,但是当单击编辑文本 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;
    }
};


最佳答案

这假设 EditTextsScrollView 的直接子级

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/

相关文章:

java - BufferedReader 如何

java - Android - getApplicationContext 出错

Android,GridLayout 的水平和垂直滚动

android - ListView 中的可滚动 TextView ?

java - Java 中的希伯来语编码

android - APK 扩展文件下载显示验证的各种进展

ios - 如何定义适当的约束以使 ScrollView 有效工作

android - 如何使 Android ScrollView 淡出边缘始终可见?

android - 在 Recycler View 中膨胀

ios - ScrollView 分页,图像稍微向左或向右显示(开始/结束)