使用autoLayout用px写布局完成适配安卓下的适配

首先,项目初期 需要根据设计师的效果图来搭建布局, 设计师给的尺寸是1334x752的,然后设计图上全部标注的是像素,  如何弄一个万能适配的布局,且根据px来写,这成为了一个问题;

看了需求,在网上借鉴了鸿洋大神,是一个比较好的方案:

第一步: 添加依赖

dependencies {
    compile 'com.zhy:autolayout:1.4.5'
}
第二步:

在你的项目的AndroidManifest中注明你的设计稿的尺寸。 在application中

 <meta-data
            android:name="design_width"
            android:value="752" />
        <meta-data
            android:name="design_height"
            android:value="1334" />
第三步:

让你的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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值