`
lovehong0306
  • 浏览: 12146 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

ScrollView当显示超出当前页面时自动移动到最底端

阅读更多

文章出处:http://gundumw100.iteye.com/blog/1162964

 

卷轴视图(ScrollView)是指当拥有很多内容,一屏显示不完时,需要通过滚动来显示视图。比如在做一个阅读器的时候,文章很长,一页显示不完,那么就需要使用卷轴视图来滚动显示下一页。 

 

 

private ScrollView mScrollView;  
private LinearLayout mLayout;  
private final Handler mHandler = new Handler();  
  
mScrollView = (ScrollView)findViewById(R.id.scroll);  
mLayout = (LinearLayout)findViewById(R.id.linearlayout);//linearlayout外层为 scroll  
mHandler.post(mScrollToBottom);  
  
private Runnable mScrollToBottom = new Runnable() {      
     @Override  
     public void run() {  
      // TODO Auto-generated method stub  
      int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();  
      if (off > 0) {  
       mScrollView.scrollTo(0, off);  
       }  
      }  
     };  

 

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

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

解决的方法其实也很简单,使用post: 

 

final ScrollView svResult = (ScrollView) findViewById(R.id.svResult);  
svResult.post(new Runnable() {  
        public void run() {  
            svResult.fullScroll(ScrollView.FOCUS_DOWN);  
        }  
}); 

 


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

 

 

public static void scrollToBottom(final View scroll, final View inner) {  
  
Handler mHandler = new Handler();  
   
mHandler.post(new Runnable() {  
public void run() {  
if (scroll == null || inner == null) {  
return;  
}  
  
int offset = inner.getMeasuredHeight() - scroll.getHeight();  
if (offset < 0) {  
offset = 0;  
}  
  
scroll.scrollTo(0, offset);  
}  
});  
}  
分享到:
评论
2 楼 lovehong0306 2012-04-25  
aswang 写道
你的文章不错,说到内部机制上了,赞一个!

转载的 呵呵
不过看多了自己也就会了
1 楼 aswang 2012-04-25  
你的文章不错,说到内部机制上了,赞一个!

相关推荐

    SCrollView自动滚动视图

    UIPageControl通常配合ScrollView使用,它像一个小的分页指示器,显示当前页面和总页面数。在ScrollView滚动时,我们可以更新UIPageControl的currentPage属性,让用户知道当前显示的是哪一页。在"UIPageControlDemo...

    scrollView自动循环滚动

    为了实现循环滚动,当最后一张图片滚动完毕时,我们需要更新contentOffset,使其回到第一张图片的位置,同时更新ScrollView的显示,将最后一张图片移动到最左侧,第一张图片移动到最右侧,从而达到视觉上的无缝切换...

    Android ScrollView自动滑动

    本文将深入探讨如何实现ScrollView的自动滑动功能,特别是在创建"关于我们"页面时,如何让ScrollView自动滑动到底部,以及相关的编程技术和注意事项。 一、ScrollView基础知识 ScrollView是Android提供的一个可滚动...

    IOS ScrollView自动翻页

    当我们需要实现"ScrollView自动翻页"的功能时,这通常涉及到UIScrollView的子类,如UIPageViewController或者自定义的滚动视图布局。这个功能常见于电子书、相册应用或者轮播图组件等,它能为用户提供连续且流畅的...

    监听Scrollview滑动到最左边与最右边

    有时,我们可能需要监听ScrollView的滑动事件,尤其是当ScrollView滑动到最左边或最右边时,可能需要执行特定的操作,比如加载更多数据或者显示指示器。本篇文章将详细介绍如何实现这一功能。 首先,我们需要理解...

    TextView Html.fromHtml ScrollView——可追加自动显示最后行

    在Android中,当TextView的内容超过屏幕可见范围时,如果需要用户滚动查看所有内容,可以使用ScrollView作为父容器包裹TextView。ScrollView允许其子视图进行垂直滚动,即使子视图的大小超过了ScrollView的大小。...

    自动循环滚动scrollView

    // 如果是循环滚动,当到达最后一项时,重置到第一项 scrollView.contentOffset = CGPoint.zero } } ``` 为了实现无缝循环滚动,我们需要处理好内容的边界情况。当`contentOffset`达到最大值时,我们需要将其...

    Scrollview滑动,并且单个页面也实现放大缩小,滑回来可还原

    本主题探讨的是如何在ScrollView中实现一个具有页面滑动功能,同时每个页面还能进行单独的放大缩小操作,当滑动到下一个页面再返回时,原页面能自动恢复到原来的大小。此外,还增加了双击屏幕实现快速放大的功能。 ...

    ScrollView

    当 `bounce` 设置为 `true` 时,用户滚动到内容的边缘时,ScrollView 会有一个回弹效果。 6. **scrollEvent**:你可以监听 `scroll` 事件来获取用户滚动时的信息,例如滚动位置。这对于创建动态效果或实现特定功能...

    ScrollView动态加载最新版加动态锁定当前页面

    ScrollView动态加载最新版加动态锁定当前页面!!!!

    ScrollView自动滚动

    3. 当需要停止滚动时,使用Handler.removeCallbacks()来移除Runnable: ```java handler.removeCallbacks(mScrollRunnable); ``` 除了基本的自动滚动,我们还可以根据需求实现更复杂的滚动逻辑,例如根据用户点击...

    Scrollview的自动滚动

    显示dialog, Scrollview自动滚动

    NGUI scrollView 循环显示demo

    2. **设置ScrollView**:在NGUI中,ScrollView的“Clamping”选项应设为“Off”,以便内容超出边界时仍能显示。同时,要确保“Pivot”设置为“Top Left”或“Bottom Left”,这样滚动会更自然。 3. **复制边界元素*...

    Unity实现ScrollView滑动吸附功能

    主要核心逻辑就是检测Content节点的RectTransform的localPosX的移动距离然后继承实现OnDrag几个接口来完成拖动再松开自动吸附到具体的位置。具体效果如下 另外说一下有几个ScrollView自带的API需要设置一下,一个事...

    Android ScrollView+GridView左右滑动 自动定位滑动到某一项

    在这个项目中,我们讨论的是如何结合使用ScrollView和GridView实现左右滑动,并在启动时或点击按钮时自动定位到指定项。 首先,让我们深入理解ScrollView。ScrollView是Android中的一个可滚动视图,它可以包裹任何...

    安卓scrollview动画滚动到顶部

    在Android开发中,ScrollView是一个非常常用的布局控件,它允许用户在内容超出屏幕时通过滚动查看更多的信息。本文将深入探讨如何实现一个ScrollView动画滚动到顶部的功能,这在很多应用场景中都非常有用,例如用户...

    ios-ScrollView的移动.zip

    当用户滚动到特定位置时,更新相关界面的状态,比如更改导航栏的标题或显示相应的订单列表。 5. 自动滚动:在某些情况下,可能需要实现自动滚动到某个子视图,如用户点击导航栏的按钮。这可以通过调用ScrollView的...

    ios-scrollview 自动轮播.zip

    当用户滚动时,这些属性会自动更新,使得用户能够查看到ScrollView内的其他部分。 在自动轮播的实现中,我们通常会有一个图片数组,用于存储要展示的图片资源。CJScrollRollView可能是这个项目中的主要类,它负责...

    scrollView自动滚动

    当我们需要实现`UIScrollView`及其子类的自动滚动功能时,通常涉及到一些关键的技术点,以下将详细介绍这些知识点。 ### 1. UIScrollView自动滚动的基本原理 `UIScrollView`的自动滚动主要依赖于其内置的`...

    判断ScrollView是否滑动到最下边或者最上边

    这个代码可以判断ScrollView是否滑动到了最下边或者最上边,同理,HorizontalScrollView也可以判断是否滑动到最右边或者最左边。使用方法就是直接用这个自定义控件并实现里面的OnScrollListener就可以了,会自动复写...

Global site tag (gtag.js) - Google Analytics