Android 经验总结

最近在制作一个项目的登陆界面UI的时候,由于没有专业美工的作图,很多素材都是要自己去搜集,有时候难免去“盗用”其他作品中的图片,然而图片大小等方面适配都不太理想,边边角角的空隙处理也不严谨。

      在账号密码输入框的样式设计的时候,要实现一个LinearLayout中包含一个TextView和一个EditText,在用户点的时候实现焦点的效果,听上去好像不难实现,但当做起来的时候还是遇到了一些问题,当点击的时候改变的背景仅仅是editext的部分,而整个linear无论如何设置都没有达到想要的效果,尝试了很久,后来经过同事的帮助才了解到一个以前没用过的属性 android:addStatesFromChildren,做一简单的整理,算是记录学习的过程。

      在android的API中是这样描述的:

    设置整个viewGroup的drawable状态是否也包含子空间的drawable状态。该属性用于当子控件editext或者button获得焦点时作为一个组出现使用(翻译的不好,水平有限,理解就好),这样一来,将android:addStatesFromChildren设为true,当组中的EditText或是Button获取焦点时,将Layout的Background设置成相应EditText或的Button的Drawable ,这样看上去该linear中的view是一个整体。

 2: android:descendantFocusability

    开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。

    这时候就可以使用descendantFocusability来解决啦,API描述如下:

android:descendantFocusability

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.

Must be one of the following constant values.

 

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

        beforeDescendants:viewgroup会优先其子类控件而获取到焦点

        afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

 

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。

心得:遇到不会不懂的地方除了网上查询资料之外,也可以多多去尝试每种属性的作用,多阅读官方文档(我始终觉得还是读原文的比翻译的理解的会更好)。


android:focusableInTouchMode  :控件高亮显示



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值