zoukankan      html  css  js  c++  java
  • ScrollView当显示超出当前页面时自动移动到最底端【转】

    本文转载自:http://gundumw100.iteye.com/blog/1162964

    卷轴视图(ScrollView)是指当拥有很多内容,一屏显示不完时,需要通过滚动来显示视图。比如在做一个阅读器的时候,文章很长,一页显示不完,那么就需要使用卷轴视图来滚动显示下一页。 
    Java代码  收藏代码
    1. private ScrollView mScrollView;  
    2. private LinearLayout mLayout;  
    3. private final Handler mHandler = new Handler();  
    4.   
    5. mScrollView = (ScrollView)findViewById(R.id.scroll);  
    6. mLayout = (LinearLayout)findViewById(R.id.linearlayout);//linearlayout外层为 scroll  
    7. mHandler.post(mScrollToBottom);  
    8.   
    9. private Runnable mScrollToBottom = new Runnable() {      
    10.      @Override  
    11.      public void run() {  
    12.       // TODO Auto-generated method stub  
    13.       int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();  
    14.       if (off > 0) {  
    15.        mScrollView.scrollTo(0, off);  
    16.        }  
    17.       }  
    18.      };  

    在Android,一个单独的TextView是无法滚动的,需要放在一个ScrollView中。ScrollView提供了一系列的函数,其中fullScroll用来实现home和end键的功能,也就是滚动到顶部和底部。 

    但是,如果在TextView的append后面马上调用fullScroll,会发现无法滚动到真正的底部,这是因为Android下很多(如果不是全部的话)函数都是基于消息的,用消息队列来保证同步,所以函数调用多数是异步操作的。当TextView调用了append会,并不等text显示出来,而是把text的添加到消息队列之后立刻返回,fullScroll被调用的时候,text可能还没有显示,自然无法滚动到正确的位置。 

    解决的方法其实也很简单,使用post: 
    Java代码  收藏代码
    1. final ScrollView svResult = (ScrollView) findViewById(R.id.svResult);  
    2. svResult.post(new Runnable() {  
    3.         public void run() {  
    4.             svResult.fullScroll(ScrollView.FOCUS_DOWN);  
    5.         }  
    6. });  



    Android将ScrollView移动到最底部 
    scrollTo方法可以调整view的显示位置。 
    在需要的地方调用以下方法即可。 
    scroll表示外层的view,inner表示内层的view,其余内容都在inner里。 
    注意,方法中开一个新线程是必要的。 
    否则在数据更新导致换行时getMeasuredHeight方法并不是最新的高度。 

    Java代码  收藏代码
    1. public static void scrollToBottom(final View scroll, final View inner) {  
    2.   
    3. Handler mHandler = new Handler();  
    4.    
    5. mHandler.post(new Runnable() {  
    6. public void run() {  
    7. if (scroll == null || inner == null) {  
    8. return;  
    9. }  
    10.   
    11. int offset = inner.getMeasuredHeight() - scroll.getHeight();  
    12. if (offset < 0) {  
    13. offset = 0;  
    14. }  
    15.   
    16. scroll.scrollTo(0, offset);  
    17. }  
    18. });  
    19. }  
     
  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/6632924.html
Copyright © 2011-2022 走看看