มีวิธีการเลื่อนมุมมองเลื่อนโดยทางโปรแกรมไปยังข้อความแก้ไขเฉพาะหรือไม่


206

ฉันมีกิจกรรมที่ยาวมาก ๆ ด้วย scrollview เป็นแบบฟอร์มที่มีเขตข้อมูลต่าง ๆ ที่ผู้ใช้ต้องกรอกฉันมีช่องทำเครื่องหมายครึ่งทางลงแบบฟอร์มของฉันและเมื่อผู้ใช้ตรวจสอบมันฉันต้องการที่จะเลื่อนไปยังส่วนเฉพาะของมุมมอง มีวิธีการเลื่อนไปยังวัตถุ EditText (หรือวัตถุมุมมองอื่น ๆ ) โดยทางโปรแกรมหรือไม่

นอกจากนี้ฉันรู้ว่าสิ่งนี้เป็นไปได้โดยใช้ X และ Y coords แต่ฉันต้องการหลีกเลี่ยงการทำเช่นนี้เนื่องจากแบบฟอร์มอาจเปลี่ยนจากผู้ใช้เป็นผู้ใช้


3
the form may changed from user to userแต่คุณสามารถใช้mEditView.getTop();
nebkat

1
หากมีใครบางคนกำลังใช้ NestedScrollView ภายใน CoordinatorLayout คุณสามารถเลื่อนไปที่มุมมองเฉพาะผ่านทางstackoverflow.com/questions/52083678/…
user1506104

คำตอบ:


451
private final void focusOnView(){
        your_scrollview.post(new Runnable() {
            @Override
            public void run() {
                your_scrollview.scrollTo(0, your_EditBox.getBottom());
            }
        });
    }

129
ฉันพบว่าการใช้ smoothScrollTo (0, your_EditBox.getTop ()) จะได้ผลลัพธ์ที่ดีกว่า (เลื่อนตัวเลื่อนไปที่มุมมองที่ต้องการ) แต่นอกเหนือจากนั้น - คำตอบที่ดี
Muzikant

18
@ xmenW.K คำตอบสั้น ๆ : เนื่องจาก UI ทำงานโดยขึ้นอยู่กับคิวของสิ่งที่ต้องทำและโดยทั่วไปคุณจะบอกเธรด UI เมื่อคุณทำได้หลังจากที่คุณทำสิ่งที่คุณต้องทำก่อนหน้านี้ให้ทำ (เลื่อน) . โดยทั่วไปคุณจะวางสโครลไว้ในคิวและปล่อยให้เธรดทำเมื่อทำได้ตามลำดับของสิ่งที่ทำก่อนที่คุณจะร้องขอ
Martin Marconcini

37
นอกจากนี้ยังเป็นไปได้ที่จะโพสต์ Runnable ไปยัง ScrollView ตัวเองแทนที่จะสร้างตัวจัดการใหม่:your_scrollview.post(...
Sherif elKhatib

มีวิธีใดบ้างในการทำให้เป็นศูนย์กลางของมุมมองแทนที่จะเป็น getBottom ()? เพราะกรณีของฉันคือ googleMap แทน EditText
Zin Win Htet

5
getBottom () และ getTop () สัมพันธ์กับพ่อแม่
cambunctious

57

คำตอบของ Sherif elKhatib สามารถดีขึ้นอย่างมากถ้าคุณต้องการที่จะเลื่อนมุมมองไปยังศูนย์กลางของมุมมองเลื่อน วิธีการที่ใช้ซ้ำได้นี้จะเลื่อนมุมมองไปยังกึ่งกลางที่มองเห็นได้ของ HorizontalScrollView อย่างราบรื่น

private final void focusOnView(final HorizontalScrollView scroll, final View view) {
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            int vLeft = view.getLeft();
            int vRight = view.getRight();
            int sWidth = scroll.getWidth();
            scroll.smoothScrollTo(((vLeft + vRight - sWidth) / 2), 0);
        }
    });
}

สำหรับการScrollViewใช้งานในแนวตั้ง

...
int vTop = view.getTop();
int vBottom = view.getBottom();
int sHeight = scroll.getBottom();
scroll.smoothScrollTo(((vTop + vBottom - sHeight) / 2), 0);
...

3
คุณต้องปรับรหัสของคุณ คุณต้องรับความกว้างของมุมมองเลื่อนและคุณต้องเปลี่ยนสูตรเป็น sv.smoothScrollTo ((vLeft + vRight) / 2) - (svWidth / 2), 0);
ประถม

2
มิฉะนั้นมุมมองใน scrollView จะไม่อยู่กึ่งกลาง ฉันแก้ไขให้คุณแล้ว
ประถม

คุณตรวจสอบสูตรการทำงานอย่างถูกต้องหรือไม่เพราะอันที่เก่ากว่านั้นใช้ได้ดีสำหรับฉัน
ahmadalibaloch

1
@ เสริมสูตรของคุณและ ahmads มีความง่ายและขยายรุ่นของการแสดงออกเกี่ยวกับพีชคณิตเดียวกันไม่จำเป็นต้องมีการปรับ
k29

1
@ k29 คุณอ้างถึงสองสูตรที่มองเห็นได้ที่นี่หรือไม่? พวกเขาทั้งคู่จากฉันฉันทำให้สูตรของความคิดเห็นของฉันง่ายขึ้นและแก้ไขคำตอบตามนั้น แต่ที่เหลือทั้งหมดยังคงเหมือนเดิมจากคำตอบเดิมและก็มีประโยชน์มากสำหรับฉัน
ประถมศึกษา

51

มันใช้งานได้ดีสำหรับฉัน:

  targetView.getParent().requestChildFocus(targetView,targetView);

โมฆะสาธารณะ RequestChildFocus (ดูลูก, ดูเน้น)

เด็ก - ลูกของ ViewParent นี้ที่ต้องการโฟกัส มุมมองนี้จะมีมุมมองที่มุ่งเน้น ไม่จำเป็นว่าจะต้องมีมุมมองที่แท้จริง

เน้น - มุมมองที่เป็นลูกหลานของเด็กที่มีโฟกัสจริง


ดูชนิดของการกระโดดในการเลื่อนที่ราบรื่น
silentsudo

32

View.requestRectangleOnScreen(Rect, Boolean)ในความคิดของวิธีที่ดีที่สุดเพื่อเลื่อนไปยังรูปสี่เหลี่ยมผืนผ้าให้ผ่าน คุณควรเรียกมันบนที่Viewคุณต้องการเลื่อนและผ่านสี่เหลี่ยมท้องถิ่นที่คุณต้องการให้ปรากฏบนหน้าจอ พารามิเตอร์ที่สองควรใช้falseเพื่อการเลื่อนที่ราบรื่นและtrueสำหรับการเลื่อนทันที

final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
view.requestRectangleOnScreen(rect, false);

1
ทำงานให้ฉันภายในเพจเจอร์มุมมองมี scrollview และต้องเลื่อนไปยังมุมมองที่ใช้งานได้ในขณะนี้โดยใช้รหัสที่กล่าวถึงที่นี่
Pankaj

2
แน่นอนหนึ่งนี้ควรเป็นคำตอบที่ได้รับการยอมรับscrollview.smoothScrollToจะไม่ทำงานหากมุมมองที่ต้องการปิดหน้าจอ (ลองใน android emulator กับ sdk รุ่น 26)
Sony

@Michael ฉันควรจะห่อnew Handler().post()?
จอห์นนี่ห้า

@JohnnyFive มันขึ้นอยู่กับบริบทที่คุณใช้รหัสนี้
Michael

12

ฉันสร้างวิธีการอรรถประโยชน์ขนาดเล็กตามคำตอบจาก WarrenFaith รหัสนี้ยังคำนึงถึงถ้ามุมมองนั้นสามารถมองเห็นได้ใน scrollview โดยไม่จำเป็นต้องเลื่อน

public static void scrollToView(final ScrollView scrollView, final View view) {

    // View needs a focus
    view.requestFocus();

    // Determine if scroll needs to happen
    final Rect scrollBounds = new Rect();
    scrollView.getHitRect(scrollBounds);
    if (!view.getLocalVisibleRect(scrollBounds)) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                scrollView.smoothScrollTo(0, view.getBottom());
            }
        });
    } 
}

ฉันเดาscrollBoundsควรเป็นพารามิเตอร์สำหรับscrollView.getHitRectวิธีการ
วีเจย์ C


7

EditText ของฉันซ้อนอยู่หลายเลเยอร์ภายใน ScrollView ของฉันซึ่งตัวเองไม่ใช่มุมมองรูทของโครงร่าง เนื่องจาก getTop () และ getBottom () ดูเหมือนว่าจะรายงานพิกัดภายในมุมมองที่มีอยู่ฉันจึงคำนวณระยะทางจากด้านบนของ ScrollView ไปที่ด้านบนของ EditText โดยวนผู้ปกครองของ EditText

// Scroll the view so that the touched editText is near the top of the scroll view
new Thread(new Runnable()
{
    @Override
    public
    void run ()
    {
        // Make it feel like a two step process
        Utils.sleep(333);

        // Determine where to set the scroll-to to by measuring the distance from the top of the scroll view
        // to the control to focus on by summing the "top" position of each view in the hierarchy.
        int yDistanceToControlsView = 0;
        View parentView = (View) m_editTextControl.getParent();
        while (true)
        {
            if (parentView.equals(scrollView))
            {
                break;
            }
            yDistanceToControlsView += parentView.getTop();
            parentView = (View) parentView.getParent();
        }

        // Compute the final position value for the top and bottom of the control in the scroll view.
        final int topInScrollView = yDistanceToControlsView + m_editTextControl.getTop();
        final int bottomInScrollView = yDistanceToControlsView + m_editTextControl.getBottom();

        // Post the scroll action to happen on the scrollView with the UI thread.
        scrollView.post(new Runnable()
        {
            @Override
            public void run()
            {
                int height =m_editTextControl.getHeight();
                scrollView.smoothScrollTo(0, ((topInScrollView + bottomInScrollView) / 2) - height);
                m_editTextControl.requestFocus();
            }
        });
    }
}).start();

5

ความแตกต่างอื่นจะเป็น:

scrollView.postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        scrollView.smoothScrollTo(0, img_transparent.getTop());
    }
}, 2000);

หรือคุณสามารถใช้post()วิธีการ


5

ฉันรู้ว่านี่อาจจะสายเกินไปสำหรับคำตอบที่ดีกว่า แต่โซลูชันที่สมบูรณ์แบบที่ต้องการจะต้องเป็นระบบเช่นตัวกำหนดตำแหน่ง ฉันหมายถึงเมื่อระบบทำการกำหนดตำแหน่งสำหรับฟิลด์ตัวแก้ไขมันจะวางฟิลด์ไว้ใกล้กับคีย์บอร์ดดังนั้น UI / UX จึงเป็นกฎที่สมบูรณ์แบบ

สิ่งที่ทำให้โค้ดด้านล่างนี้คือตำแหน่งของ Android อย่างราบรื่น ก่อนอื่นเราให้จุดเลื่อนปัจจุบันเป็นจุดอ้างอิง สิ่งที่สองคือการหาจุดเลื่อนตำแหน่งที่ดีที่สุดสำหรับเครื่องมือแก้ไขการทำเช่นนี้เราเลื่อนไปด้านบนแล้วขอเขตข้อมูลเครื่องมือแก้ไขเพื่อให้องค์ประกอบ ScrollView ทำการวางตำแหน่งที่ดีที่สุด Gatcha! เราได้เรียนรู้ตำแหน่งที่ดีที่สุดแล้ว ตอนนี้สิ่งที่เราจะทำคือเลื่อนอย่างราบรื่นจากจุดก่อนหน้าไปยังจุดที่เราเพิ่งค้นพบใหม่ หากคุณต้องการคุณสามารถละเว้นการเลื่อนแบบราบรื่นโดยใช้scrollToแทนsmoothScrollToเท่านั้น

หมายเหตุ:คอนเทนเนอร์หลัก ScrollView เป็นเขตข้อมูลสมาชิกชื่อ scrollViewSignup เนื่องจากตัวอย่างของฉันเป็นหน้าจอสมัครใช้งานเนื่องจากคุณอาจจะคิดมาก

view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(final View view, boolean b) {
            if (b) {
                scrollViewSignup.post(new Runnable() {
                    @Override
                    public void run() {
                        int scrollY = scrollViewSignup.getScrollY();
                        scrollViewSignup.scrollTo(0, 0);
                        final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
                        view.requestRectangleOnScreen(rect, true);

                        int new_scrollY = scrollViewSignup.getScrollY();
                        scrollViewSignup.scrollTo(0, scrollY);
                        scrollViewSignup.smoothScrollTo(0, new_scrollY);
                    }
                });
            }
        }
    });

หากคุณต้องการใช้บล็อกนี้สำหรับอินสแตนซ์EditTextทั้งหมดและรวมเข้ากับรหัสหน้าจอของคุณได้อย่างรวดเร็ว คุณสามารถสร้าง traverser ได้ตามด้านล่าง ในการทำเช่นนี้ฉันได้สร้าง OnFocusChangeListener เป็นเขตข้อมูลสมาชิกชื่อfocusChangeListenerToScrollEditorและเรียกมันว่า onCreate ดังด้านล่าง

traverseEditTextChildren(scrollViewSignup, focusChangeListenerToScrollEditor);

และวิธีการใช้งานมีดังนี้

private void traverseEditTextChildren(ViewGroup viewGroup, View.OnFocusChangeListener focusChangeListenerToScrollEditor) {
    int childCount = viewGroup.getChildCount();
    for (int i = 0; i < childCount; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof EditText)
        {
            ((EditText) view).setOnFocusChangeListener(focusChangeListenerToScrollEditor);
        }
        else if (view instanceof ViewGroup)
        {
            traverseEditTextChildren((ViewGroup) view, focusChangeListenerToScrollEditor);
        }
    }
}

ดังนั้นสิ่งที่เราทำที่นี่คือการทำให้เด็กอินสแตนซ์ EditText ทั้งหมดเรียกผู้ฟังที่สนใจ

ในการเข้าถึงโซลูชันนี้ฉันได้ตรวจสอบโซลูชันทั้งหมดที่นี่และสร้างโซลูชันใหม่เพื่อผลลัพธ์ UI / UX ที่ดีขึ้น

ขอบคุณมากสำหรับคำตอบอื่น ๆ ที่เป็นแรงบันดาลใจให้ฉันมาก

3

คำตอบข้างต้นจะทำงานได้ดีถ้า ScrollView เป็นพาเรนต์โดยตรงของ ChildView หาก ChildView ของคุณถูกห่อใน ViewGroup อื่นใน ScrollView มันจะทำให้เกิดพฤติกรรมที่ไม่คาดคิดเนื่องจาก View.getTop () รับตำแหน่งที่สัมพันธ์กับพาเรนต์ ในกรณีเช่นนี้คุณต้องใช้สิ่งนี้:

public static void scrollToInvalidInputView(ScrollView scrollView, View view) {
    int vTop = view.getTop();

    while (!(view.getParent() instanceof ScrollView)) {
        view = (View) view.getParent();
        vTop += view.getTop();
    }

    final int scrollPosition = vTop;

    new Handler().post(() -> scrollView.smoothScrollTo(0, scrollPosition));
}

นี่เป็นโซลูชั่นที่ครอบคลุมมากที่สุดเพราะคำนึงถึงตำแหน่งของผู้ปกครองด้วย ขอบคุณสำหรับการโพสต์!
Gustavo Baiocchi Costa


2

ฉันคิดว่าฉันพบวิธีการแก้ปัญหาที่ใช้งานได้ง่ายกว่าและมีข้อผิดพลาดน้อยกว่า

ScrollView.requestChildRectangleOnScreen

ไม่มีคณิตศาสตร์ที่เกี่ยวข้องและตรงกันข้ามกับโซลูชันที่เสนออื่น ๆ มันจะจัดการการเลื่อนอย่างถูกต้องทั้งขึ้นและลง

/**
 * Will scroll the {@code scrollView} to make {@code viewToScroll} visible
 * 
 * @param scrollView parent of {@code scrollableContent}
 * @param scrollableContent a child of {@code scrollView} whitch holds the scrollable content (fills the viewport).
 * @param viewToScroll a child of {@code scrollableContent} to whitch will scroll the the {@code scrollView}
 */
void scrollToView(ScrollView scrollView, ViewGroup scrollableContent, View viewToScroll) {
    Rect viewToScrollRect = new Rect(); //coordinates to scroll to
    viewToScroll.getHitRect(viewToScrollRect); //fills viewToScrollRect with coordinates of viewToScroll relative to its parent (LinearLayout) 
    scrollView.requestChildRectangleOnScreen(scrollableContent, viewToScrollRect, false); //ScrollView will make sure, the given viewToScrollRect is visible
}

มันเป็นความคิดที่ดีที่จะห่อมันไว้postDelayedเพื่อทำให้มันน่าเชื่อถือมากขึ้นในกรณีที่ScrollViewมีการเปลี่ยนแปลงในขณะนี้

/**
 * Will scroll the {@code scrollView} to make {@code viewToScroll} visible
 * 
 * @param scrollView parent of {@code scrollableContent}
 * @param scrollableContent a child of {@code scrollView} whitch holds the scrollable content (fills the viewport).
 * @param viewToScroll a child of {@code scrollableContent} to whitch will scroll the the {@code scrollView}
 */
private void scrollToView(final ScrollView scrollView, final ViewGroup scrollableContent, final View viewToScroll) {
    long delay = 100; //delay to let finish with possible modifications to ScrollView
    scrollView.postDelayed(new Runnable() {
        public void run() {
            Rect viewToScrollRect = new Rect(); //coordinates to scroll to
            viewToScroll.getHitRect(viewToScrollRect); //fills viewToScrollRect with coordinates of viewToScroll relative to its parent (LinearLayout) 
            scrollView.requestChildRectangleOnScreen(scrollableContent, viewToScrollRect, false); //ScrollView will make sure, the given viewToScrollRect is visible
        }
    }, delay);
}

1

การตรวจสอบรหัสที่มา Android คุณสามารถพบว่ามีอยู่แล้วเป็นหน้าที่ของสมาชิกScrollView- scrollToChild(View)- ที่ไม่ตรงกับสิ่งที่มีการร้องขอ Unfortunatelly privateฟังก์ชั่นนี้เป็นเหตุผลปิดบังบางทำเครื่องหมาย จากฟังก์ชั่นที่ฉันได้เขียนฟังก์ชั่นดังต่อไปนี้ที่พบครั้งแรกScrollViewข้างต้นViewระบุเป็นพารามิเตอร์และเลื่อนเพื่อให้มองเห็นได้ภายในScrollView:

 private void make_visible(View view)
 {
  int vt = view.getTop();
  int vb = view.getBottom();

  View v = view;

  for(;;)
     {
      ViewParent vp = v.getParent();

      if(vp == null || !(vp instanceof ViewGroup))
         break;

      ViewGroup parent = (ViewGroup)vp;

      if(parent instanceof ScrollView)
        {
         ScrollView sv = (ScrollView)parent;

         // Code based on ScrollView.computeScrollDeltaToGetChildRectOnScreen(Rect rect) (Android v5.1.1):

         int height = sv.getHeight();
         int screenTop = sv.getScrollY();
         int screenBottom = screenTop + height;

         int fadingEdge = sv.getVerticalFadingEdgeLength();

         // leave room for top fading edge as long as rect isn't at very top
         if(vt > 0)
            screenTop += fadingEdge;

         // leave room for bottom fading edge as long as rect isn't at very bottom
         if(vb < sv.getChildAt(0).getHeight())
            screenBottom -= fadingEdge;

         int scrollYDelta = 0;

         if(vb > screenBottom && vt > screenTop) 
           {
            // need to move down to get it in view: move down just enough so
            // that the entire rectangle is in view (or at least the first
            // screen size chunk).

            if(vb-vt > height) // just enough to get screen size chunk on
               scrollYDelta += (vt - screenTop);
            else              // get entire rect at bottom of screen
               scrollYDelta += (vb - screenBottom);

             // make sure we aren't scrolling beyond the end of our content
            int bottom = sv.getChildAt(0).getBottom();
            int distanceToBottom = bottom - screenBottom;
            scrollYDelta = Math.min(scrollYDelta, distanceToBottom);
           }
         else if(vt < screenTop && vb < screenBottom) 
           {
            // need to move up to get it in view: move up just enough so that
            // entire rectangle is in view (or at least the first screen
            // size chunk of it).

            if(vb-vt > height)    // screen size chunk
               scrollYDelta -= (screenBottom - vb);
            else                  // entire rect at top
               scrollYDelta -= (screenTop - vt);

            // make sure we aren't scrolling any further than the top our content
            scrollYDelta = Math.max(scrollYDelta, -sv.getScrollY());
           }

         sv.smoothScrollBy(0, scrollYDelta);
         break;
        }

      // Transform coordinates to parent:
      int dy = parent.getTop()-parent.getScrollY();
      vt += dy;
      vb += dy;

      v = parent;
     }
 }

1

ทางออกของฉันคือ

            int[] spinnerLocation = {0,0};
            spinner.getLocationOnScreen(spinnerLocation);

            int[] scrollLocation = {0, 0};
            scrollView.getLocationInWindow(scrollLocation);

            int y = scrollView.getScrollY();

            scrollView.smoothScrollTo(0, y + spinnerLocation[1] - scrollLocation[1]);

1
 scrollView.post(new Runnable() {
                    @Override
                    public void run() {
                        scrollView.smoothScrollTo(0, myTextView.getTop());

                    }
                });

ตอบรับจากโครงการจริงของฉัน

ป้อนคำอธิบายรูปภาพที่นี่


0

ในกรณีของฉันไม่EditTextเป็นgoogleMapเช่นนั้น และทำงานได้สำเร็จเช่นนี้

    private final void focusCenterOnView(final ScrollView scroll, final View view) {
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            int centreX=(int) (view.getX() + view.getWidth()  / 2);
            int centreY= (int) (view.getY() + view.getHeight() / 2);
            scrollView.smoothScrollBy(centreX, centreY);
        }
    });
}

0

Que: มีวิธีการเลื่อนมุมมองการเลื่อนโดยทางโปรแกรมไปยัง edittext เฉพาะหรือไม่

ตอบ: มุมมองเลื่อนซ้อนใน recyclerview ตำแหน่งสุดท้ายที่เพิ่มข้อมูลบันทึก

adapter.notifyDataSetChanged();
nested_scroll.setScrollY(more Detail Recycler.getBottom());

มีวิธีการเลื่อนมุมมองเลื่อนโดยทางโปรแกรมไปยังข้อความแก้ไขเฉพาะหรือไม่


ทำไมด้านล่าง
นักพัฒนา android

0

ต่อไปนี้เป็นสิ่งที่ฉันใช้:

int amountToScroll = viewToShow.getBottom() - scrollView.getHeight() + ((LinearLayout.LayoutParams) viewToShow.getLayoutParams()).bottomMargin;
// Check to see if scrolling is necessary to show the view
if (amountToScroll > 0){
    scrollView.smoothScrollTo(0, amountToScroll);
}

สิ่งนี้จะได้รับจำนวนเงินเลื่อนที่จำเป็นในการแสดงด้านล่างของมุมมองรวมถึงระยะขอบใด ๆ ที่ด้านล่างของมุมมองนั้น


0

เลื่อนแนวตั้งเหมาะสำหรับรูปแบบ คำตอบขึ้นอยู่กับการเลื่อนตามแนวนอนของ Ahmadalibaloch

private final void focusOnView(final HorizontalScrollView scroll, final View view) {
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            int top = view.getTop();
            int bottom = view.getBottom();
            int sHeight = scroll.getHeight();
            scroll.smoothScrollTo(0, ((top + bottom - sHeight) / 2));
        }
    });
}

คุณแน่ใจหรือว่าควรใช้ a HorizontalScrollViewในวิธีนี้?
Shahood ul Hassan


0

จากคำตอบของ Sherif สิ่งต่อไปนี้ใช้ได้ดีที่สุดสำหรับกรณีการใช้งาน การเปลี่ยนแปลงที่เด่นgetTop()แทนgetBottom()และแทนsmoothScrollTo()scrollTo()

    private void scrollToView(final View view){
        final ScrollView scrollView = findViewById(R.id.bookmarksScrollView);
        if(scrollView == null) return;

        scrollView.post(new Runnable() {
            @Override
            public void run() {
                scrollView.smoothScrollTo(0, view.getTop());
            }
        });
    }

-1

หาก scrlMain เป็น NestedScrollView ของคุณให้ใช้สิ่งต่อไปนี้

scrlMain.post(new Runnable() {
                    @Override
                    public void run() {
                        scrlMain.fullScroll(View.FOCUS_UP);

                    }
                });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.