美文网首页
那些个Android的坑

那些个Android的坑

作者: chandarlee | 来源:发表于2016-04-19 14:54 被阅读105次

    Button中setSpan无效

    Button是最常用的基本控件之一,它只是简单继承于TextView,所有逻辑均在父类中实现。本文旨在就日常使用Button过程中遇到的系列问题进行记录,并将不断更新。
      TextView有个属性android:textAllCaps,该属性用于将设置的源文本转换为大写字符串。比如textView.setText("AbcdEfg");同时android:textAllCaps = true或者textView.setAllCaps(true);,那么实际显示的内容为ABCDEFG,全都被转换为了大写!

    Transforms source text into an ALL CAPS string, locale-aware.

    但该属性生效时,如果setText方法设置的文本中因为setSpan或者Html.fromHtml等原因包含有Spannable内容,会导致Spannable内容得不到正确的显示,即无效。Button默认情况下该属性为trueTextView默认情况下为false。在上述情况下,为了Spannable内容能正确解析和显示,需要显示的设置Buttonandroid:textAllCapsfalse,代码或者xml方式均可;或者使用TextView


    View的scrollX、scrollY属性

    scrollX和scrollY是每个view都具有的属性,分别表示该view在水平和垂直方向上相对于坐标原点滚动的距离,可正可负。通过调用scrollTo(int x, int y)或者scrollBy(int dx, int dy)方法可以修改对应的scrollX和scrollY值。注意,当view的scroll属性改变的时候,view的位置并没有改变(不会改变view相对于父viewgroup的布局),即mLeft(子view的最左边界到父view的距离)、mRight、mTop、mBottom属性不变,变化的仅仅是view的内容。

    当在一个view上运用scrollX和scrollY属性时,在view进行绘制的时候,会首先对当前的canvas进行一个translate变换,然后开始绘制view的内容,最后将canvas恢复到transalte之前的状态。具体的变换为:

            canvas.translate(-mScrollX, -mScrollY);
    

    在当前需要绘制的canvas对象上进行上面的变换,注意两个scroll值都是取反的。相当于将canvas的原点移动到对应的的(-mScrollX, mScrollY)位置处然后开始view的绘制。假设mScrollX值为负数,则canvas的原点x坐标会向右移动,所以会导致view的内容整体往x轴正方向移动,即内容向正方向移动,所以sroll值的正负情况跟view内容移动方向相反

    相关文章

      网友评论

          本文标题:那些个Android的坑

          本文链接:https://www.haomeiwen.com/subject/fhxzlttx.html