随笔11

  • ScrollView中获取屏幕首行文字. 在这样一个ScrollView 中, ScrollView 对象mScrollView 有一个子对象ViewGroup mViewGroup(重置布局), mViewGroup 中又有0...n 个TextView 对象.

          mScrollView ==> mViewGroup ==> TextView 对象

                                                               TextView 对象

                                                               TextView 对象          0...n


           就是这样的场景了, 如何获取 mScrollView中显示在屏幕中, 并且非空的首行文字呢? 不知道有没有方法能直接取得屏幕当前显示的子对象呢? 反正我是不知道的, 那么只能用自己的土方法来实现了.

                           

          | textView  |                  可视区域顶, 滚动条Y 轴

          |               |

          | textView  |

          |               |

          |               |

          | textView  |                   可视区域底

          |               |

  • mScrollView 的滚动条的Y 轴是关键点!
  • 整理下大概思路:
  1. 获取 mScrollView 的滚动条的Y 轴
  2. 再累计顺序TextView 子对象的高度, 直到这个高度超过 mScrollView 的滚动条的Y 轴
  3. 获取第二步最后操作的 TextView 的文本, 如果是空的, 继续第二步, 否则保留这个 TextView对象做进一步的处理
  4. 计算 Y 轴和累积TextView 子对象的高度差, 利用这个高度差, 就算出在TextView 对象中的字符偏移量. 在随笔10 中, 我最后写到了怎么获取TextView 选中文字, 道理是一样的, 靠的是字符偏移量.
  5. 当然有了偏移量我们的目的基本就可以达到了, 但是一些细节还是要处理.

          如    我是lin49940,  我是lin49940, 我是lin49940, 我是lin49940,                           可视屏幕顶

                 (字符偏移量)                         我是lin49940,我是lin49940,我

                 我是lin49940,  我是lin49940,  我是lin49940,我是lin49940,

          可能我们要取的那段字符串刚好为空, 那怎么办, 取后面的还是取前面的? 我的想法是后=>前, 先取后面的, 如果还是空, 再取前面的. 可能你会说, 前后都为空呢? 那你是没仔细看第三步骤, 只要你不搞出越界这样的异常, 大不了最终返回空字符串.

 

 


 

  • 下面贴一些主要的方法
  • 获取 mScrollView 的滚动条的Y 轴

  • 再累计顺序TextView 子对象的高度, 直到这个高度超过 mScrollView 的滚动条的Y 轴

 

  • 获取第二步最后操作的 TextView 的文本, 如果是空的, 继续第二步

  • 计算 Y 轴和累积TextView 子对象的高度差, 利用这个高度差, 就算出在TextView 对象中的字符偏移量.android 的api 提供了好方法呢

          还有另一个有趣的方法 int lineNum = _textView.getLayout().getLineForOffset(offset); 通过偏移量计算其所在的行数, 该行数也是从0 开始的. 这个方法有好处的, 我们可以通过行数, 控制滚动条的Y轴, 达到显示指定内容的效果. 

 

  • 到这里就算完成了, 取文字的操作不难, 只要注意不要是空字符串或者操作越界就行了! 在ScrollView 中,  上面和下面有半阴影的地方, TextView 可能有边框什么的, 这些都要根据自己的实际情况进行调整.

转眼早上6点了, 准备7点半去打球了.

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值