android适配autolayout的使用心得体会
来源:互联网 发布:淘宝网连体长裤 编辑:程序博客网 时间:2024/06/07 09:10
平时我们拿到设计图的时候是px,而我们android的尺寸单位,却是sp,dp之类的。
传统的适配方案要建一大堆文件夹进行适配,百分比布局还要计算百分比。
我们希望:
拿到设计图,meta信息中填入设计图的尺寸,然后不需要额外计算,布局直接抄设计图上的尺寸,不产生任何多余的资源
文件,完成各种分辨率的适配!
鸿洋大大的autolayout基本完成了这一项工作。
用法
1、将autolayout引入
dependencies { compile project(':autolayout')}
也可以直接
dependencies { compile 'com.zhy:autolayout:1.4.5'}
2、标明设计稿尺寸
在AndroidManifest
<meta-data android:name="design_width" android:value="768"></meta-data><meta-data android:name="design_height" android:value="1280"></meta-data>
3、使用时候有两种用法:
一种是让你的Activity继承自AutoLayoutActivity.一般可以把你的基类继承AutoLayoutActivity
如果你觉得这种对你的activity改变太大等等,,,
那么,你可以将你的布局替换成
LinearLayout -> AutoLinearLayoutRelativeLayout -> AutoRelativeLayoutFrameLayout -> AutoFrameLayout
系统原有的属性都会保留。
ps:几个注意事项
1、可以多用margin,减少嵌套,因为不需要考虑适配问题,所以,可以直接margin固定距离尺寸等等,
LinearLayout的weight也不需要,直接每个布局设置相同宽度即可。
2、textview使用中发现很多问题,直接用px会出现高度不对问题。鸿洋这样解释:设计稿一般只会标识一个字体的大小
,比如你设置textSize=”20px”,实际上TextView所占据的高度肯定大于20px,字的上下都会有一定的间隙,所以一定要
灵活去写字体的高度,比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位(比如上例,选
择了marginBottom)
但是更简单的处理方式是,我们的字体尺寸可以继续用sp.
3、在listview ,recycleview 或者一些布局我们无法转换为autoXXX的布局,我们想为子布局做适配的时候,我们需要
用到同一个方法, AutoUtils.autoSize(convertView);我们可以实例化出来子布局,然后设置适配,那么这个子布局将
会适配auto布局。
对于ListView
对于ListView这类控件的item,默认根局部写“px”进行适配是无效的,因为外层非AutoXXXLayout,而是ListView。但
是,不用怕,一行代码就可以支持了:
@Overridepublic View getView(int position, View convertView, ViewGroup parent){ ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); convertView.setTag(holder); //对于listview,注意添加这一行,即可在item上使用高度 AutoUtils.autoSize(convertView); } else { holder = (ViewHolder) convertView.getTag(); } return convertView;}
注意AutoUtils.autoSize(convertView);这行代码的位置即可。demo中也有相关实例。
对于RecyclerView
public ViewHolder(View itemView){ super(itemView); AutoUtils.autoSize(itemView);}//...@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, parent, false); return new ViewHolder(convertView);}
一定要记得LayoutInflater.from(mContext).inflate使用三个参数的方法!
4、对于我们自定义的布局,我们可以用平常的适配,如果也想支持px直接写的话,可以在里面进行适配:
例如博文给出的:
AutoCardView.javapublic class AutoCardView extends CardView {private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);public AutoCardView(Context context) { super(context);}public AutoCardView(Context context, AttributeSet attrs) { super(context, attrs);}public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);}@Overridepublic LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ if (!isInEditMode()) mHelper.adjustChildren(); super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom){ super.onLayout(changed, left, top, right, bottom);}public static class LayoutParams extends CardView.LayoutParams implements AutoLayoutHelper.AutoLayoutParams{ private AutoLayoutInfo mAutoLayoutInfo; public LayoutParams(Context c, AttributeSet attrs) { super(c, attrs); mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs); } public LayoutParams(int width, int height) { super(width, height); } public LayoutParams(int width, int height, int gravity) { super(width, height, gravity); } public LayoutParams(ViewGroup.LayoutParams source) { super(source); } public LayoutParams(MarginLayoutParams source) { super(source); } public LayoutParams(FrameLayout.LayoutParams source) { super((MarginLayoutParams) source); gravity = source.gravity; } public LayoutParams(LayoutParams source) { this((FrameLayout.LayoutParams) source); mAutoLayoutInfo = source.mAutoLayoutInfo; } @Override public AutoLayoutInfo getAutoLayoutInfo() { return mAutoLayoutInfo; }}}
- android适配autolayout的使用心得体会
- Android中AutoLayout的使用
- 关于android源码的使用心得体会
- Android Studio 使用心得体会
- 使用LOG4J的心得体会
- 使用formbean的心得体会
- 使用 CodeSmith 的心得体会
- Android AutoLayout 使用
- Android AutoLayout 使用记录
- AutoLayout的基本使用
- autolayout的使用
- 使用AutoLayOut的注意事项
- iOS autolayout的使用
- AutoLayout的使用
- Android Autolayout适配
- android autolayout适配
- Autolayout自动布局的使用
- Autolayout的基本使用01
- solr 6.6 在liunx环境下的搭建和使用
- tomcat8远程访问manager 出现403
- 表单按回车自动提交
- oracle正则表达式
- HDU 1814 Peaceful Commission (2-SAT)
- android适配autolayout的使用心得体会
- 磁盘性能压测二三事之——性能参数和指标
- Linux下hello world报错syntax error near unexpected token `(' ,int main()
- slf4j log4j logback关系详解和相关用法
- 用webdriver+phantomjs实现无浏览器的自动化过程
- [BZOJ]1965: [Ahoi2005]SHUFFLE 洗牌 扩展欧几里得
- js ready函数
- “真分页”与“假分页”的实现方法
- 开源代码Window下搭建rtmp流媒体服务器