android新手总结

一直以来都做后台开发,后台开发的技术都是非常成熟的,bug不能说没有,但是都极其少,各种行为都极其符合逻辑。

最近没事玩玩android的开发,非常显而易见android sdk还没有很成熟,遇到各种貌似bug,貌似不符合逻辑的东西。发个日志记录一些心得体会,仅供参考,也给自己留个备份。

1、开发的target不能设成最新的sdk。设置成最新的sdk会有不少代码编译成功,在老版本机器上跑挂掉。说明sdk在处理support jar包的时候处理并不完善。

2、控件在代码里setbackground后,layout参数会被重置掉。看起来系统自动根据背景图算了新layout参数,如果要自定义layout参数还得重置一遍。

3、Listview在处理ItemClick事件的时候,居然看的不是自己的focus状态,看的是hasWindowFocus。这样在用popupwindow做输入提示时就很蛋疼了。popupwindow如果能focus,那么后台就被阻塞了,无法继续输入。popupwindow如果不能focus,Listing View的点击事件就不会被触发。

太蛋疼的设计,看了n久源码才看出来的。无奈只能自己从LisView继承,重写hasWindowFocus状态。
至于为啥要用popupwindow,这货可以自动跟随某个控件定位,比dialog好太多了。

当然popupwindow还有一个很蛋疼的设计,不过这个已经众所周知了,就是不设background是无法触发自己的touch事件的。各种蛋疼。 

4、SetTextSize在代码里getresource from dimension后会乱掉,直接在xml文件里面写没问题。比如xml里面定义的是18sp,再代码里拿到是54.0,设进去就乱掉了,代码里设18就没问题。暂时不知道代码如果能拿到18,反正resource拿出来就是54。而且从xml文件渲染后再get出来也是54,随后set回去字体大小就挂了。原因未知。

5、各种函数的各个版本上的显示效果不一致。比如radiobutton如果只有一个图片,那么在4.2.2上setdrawabletop和left、right、bottom效果一致。在4.0.4上面,只有right显示正常,其它的方式button大小都乱掉了。

还有editext的各种listener,在4.0.4上也有明显的bug。比如刚获得焦点就会触发textchangedlistener。

还有其它,反正很多行为不能靠逻辑推出来,只能一个个手机试试。

6、Fragment是个大坑

6.1、Fragment上面的EditText在模拟器上是不能用电脑键盘输入的,会自动失去焦点,只能用软键盘输入。

6.2、FragmentTabHost在切换tab的时候是会把tab destroy掉的,不仅仅是pause,而是彻底destroy。想要保留现场的只能重写onDestroyView和onCreateView

6.3 FragmentTabHost的布局也是一个大坑。他在渲染的时候始终会按照你的定义文件取出他需要的最小集,自己重新渲染一份,再加到原来的布局里面。这也是调了很久调出来的。

具体点说,假设你定义了:

<FragmentTabHost android:id="@android:id/tabhost">  
     <LinearLayout>  
         <TabWidget android:id="@android:id/tabs"/>  
         <FrameLayout android:id="@android:id/tabcontent"/>  
         <FrameLayout android:id="@+id/realtabcontent"/>      
         [b]<Someother/>[/b] 
     </LinearLayout>  
</FragmentTabHost>  
他渲染过后就变成了:

<FragmentTabHost android:id="@android:id/tabhost">  
     <LinearLayout>  
         <TabWidget android:id="@android:id/tabs"/>  
         <FrameLayout android:id="@android:id/tabcontent"/>  
         <FrameLayout android:id="@+id/realtabcontent">  
[b]tab实际内容放在这里[/b]
         </FrameLayout>      
     </LinearLayout>  
   
     <LinearLayout>  
         <TabWidget android:id="@android:id/tabs"/>  
         <FrameLayout android:id="@android:id/tabcontent"/>  
         <FrameLayout android:id="@+id/realtabcontent"/>      
         [b]<Someother/>[/b]  
     </LinearLayout>  
</FragmentTabHost>

由于 FragmentTabHost本质上是一个Framelayout,于是你就会遇到很蛋疼的界面覆盖问题。于是想要获得自己想要的布局,只能自己再处理 FragmentTabHost里面的view list。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值