A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

如果在TextView的append后面马上调用fullScroll,会发现无法滚动到真正的底部,这是因为Android下很多函数都是基于消息的,用消息队列来保证同步,所以函数调用多数是异步操作的。

有消息队列是异步的,消息队列先滚动到底部,然后textview的append方法显示。所以无法正确滚动到底部。

解决办法:
  1. final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView1);
  2.         if (scrollView != null) {
  3.             scrollView.post(new Runnable() {
  4.                 public void run() {
  5.                     scrollView.fullScroll(ScrollView.FOCUS_DOWN);
  6.                 }
  7.         });
  8.         }
复制代码


二、listview与滚动条一起使用,禁止listview的滚动,使用滚动条滚动到listview的底部把上面代码run里面那句换为这个scrollView.scrollTo(0, mlistViewList.getHeight());

三、listview内部高度计算函数
当listview与垂直滚动条一起使用时候,如果只用外部scrollView,而不使用listview滚动。需要下面的函数来计算listview当前高度。
  1. public static void ReCalListViewHeightBasedOnChildren(ListView listView) {
  2.         if (listView == null) return;
  3.         ListAdapter listAdapter = listView.getAdapter();
  4.         if (listAdapter == null) return;
  5.         int nTotalHeight = 0;
  6.         for (int i = 0; i < listAdapter.getCount(); i++) {
  7.             View listItem = listAdapter.getView(i, null, listView);
  8.             listItem.measure(0, 0);
  9.             nTotalHeight += listItem.getMeasuredHeight();
  10.         }
  11.         
  12.         ViewGroup.LayoutParams params = listView.getLayoutParams();
  13.         params.height = nTotalHeight + (listView.getDividerHeight()*(listAdapter.getCount()-1));
  14. }
复制代码


PS:对于APP安全检测一般我都会用:www.ineice.com

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马