首先,项目初期 需要根据设计师的效果图来搭建布局, 设计师给的尺寸是1334x752的,然后设计图上全部标注的是像素, 如何弄一个万能适配的布局,且根据px来写,这成为了一个问题;
看了需求,在网上借鉴了鸿洋大神,是一个比较好的方案:
第一步: 添加依赖
dependencies {
compile 'com.zhy:autolayout:1.4.5'
}
第二步:
在你的项目的AndroidManifest中注明你的设计稿的尺寸。 在application中
第三步:
让你的Activity继承自AutoLayoutActivity.如果不想继承AutoLayoutActivity,则在编写布局的时候雨,将
LinearLayout -> AutoLinearLayout
RelativeLayout -> AutoRelativeLayout
FrameLayout -> AutoFrameLayout
注意一一对应关系
目前支持的属性:
layout_width
layout_height
layout_margin(left,top,right,bottom)
pading(left,top,right,bottom)
textSize
maxWidth, minWidth, maxHeight, minHeight
注意事项:
对于ListView,RecyclerView的Item适配,局部写px是无效的,因为外层非AutoXXXLayout,加上一行代码
@Override
public 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;
}
对于RecyclerView,则加入
public ViewHolder(View itemView)
{
super(itemView);
AutoUtils.autoSize(itemView);
}
//...
@Override
public 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使用三个参数的方法!
后记:在实际的开发,对于适配问题,排列布局,最建议的还是使用权重来进行适配,不同分辨率的手机当适配一样的时候,体验会很好
最后贴上鸿洋大神的gitHub源码地址:
https://github.com/hongyangAndroid/AndroidAutoLayout