Android中AutoLayout的使用
来源:互联网 发布:软件风险分析 编辑:程序博客网 时间:2024/05/17 21:27
一.引入AutoLayout
app->build.gradle中
dependencies { compile 'com.zhy:autolayout:1.4.5'}
二.清单文件中配置
在AndroidManifest中注明设计的尺寸
<!--设计稿的尺寸--><meta-data android:name="design_width" android:value="1080" /><meta-data android:name="design_height" android:value="1920" />
三.使用
让你的Activity继承自AutoLayoutActivity,如果不希望继承AutoLayoutActivity,可以在编写布局文件时,将
LinearLayout -> AutoLinearLayout
RelativeLayout -> AutoRelativeLayout
FrameLayout -> AutoFrameLayout
四.配置
默认使用的高度是设备的可用高度,也就是不包括状态栏和底部的操作栏的,如果你希望拿设备的物理高度进行百分比化:
可以在Application的onCreate方法中进行设置:
AutoLayoutConifg.getInstance().useDeviceSize();
五.ListView、RecyclerView类的Item的适配
对于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;}
对于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使用三个参数的方法!
六.扩展
对于其他继承系统的FrameLayout、LinearLayout、RelativeLayout的控件,比如CardView,如果希望再其内部直接支持”px”百分比化
package com.zhy.sample.view;import android.content.Context;import android.support.v7.widget.CardView;import android.util.AttributeSet;import com.zhy.autolayout.AutoFrameLayout;import com.zhy.autolayout.utils.AutoLayoutHelper;public 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); } @Override public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) { return new AutoFrameLayout.LayoutParams(getContext(), attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!isInEditMode()) { mHelper.adjustChildren(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); }}
7.实例
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:layout_marginTop="@dimen/x36" android:layout_marginLeft="@dimen/x36" android:layout_marginRight="@dimen/x36" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/border_style_left_gray" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="@dimen/x132"> <TextView android:id="@+id/discount_recharge_card" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="@dimen/x46" android:layout_marginTop="@dimen/x44" android:text="@string/discount_recharge_card" android:textSize="@dimen/x60"/> <TextView android:id="@+id/tv_consume_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/discount_recharge_card" android:layout_alignParentRight="true" android:layout_marginRight="@dimen/x52" android:gravity="center" android:text="@string/consumption_situation" android:textColor="@color/font_ff7f18" android:textSize="@dimen/x42"/> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_alignParentBottom="true" android:layout_marginLeft="@dimen/x46" android:layout_marginRight="@dimen/x52" android:background="@color/gray_line"/> <TextView android:id="@+id/recharge_card_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/x44" android:layout_marginLeft="@dimen/x46" android:layout_marginTop="@dimen/x44" android:lineSpacingExtra="@dimen/x5" android:text="@string/cardnumber" android:textColor="@color/c_6" android:textSize="@dimen/x42"/> </LinearLayout> <View android:background="@color/background" android:layout_width="match_parent" android:layout_height="@dimen/x30"/></LinearLayout>
在 1280*720 上的显示效果:
在 1920*1080 上的显示效果:
下载
https://github.com/zeke123/AutoLayout
阅读全文
0 0
- Android中AutoLayout的使用
- android适配autolayout的使用心得体会
- iOS中autolayout的简单使用
- iOS 中 Autolayout 优先级的使用
- Android AutoLayout 使用
- Android AutoLayout 使用记录
- Storyboard 中使用 Autolayout
- ScrollView 中使用 AutoLayout
- android 中 使用 第三方库AutoLayout动态设置控件的属性
- AutoLayout的基本使用
- autolayout的使用
- 使用AutoLayOut的注意事项
- iOS autolayout的使用
- AutoLayout的使用
- iOS8中storyboard中autolayout和size class的使用
- Masonry的简单使用和xib中如何使用AutoLayout
- iOS中代码使用Autolayout
- xcode6中自动布局autolayout和sizeclass的使用
- Funny Function(HDU 6050)
- 问题 H: 循环左移
- 78. Subsets
- 7种回归分析方法
- xLua增加第三方lua库lpack
- Android中AutoLayout的使用
- 1157: 连续的n个1
- (十六)Bitmap的加载和Cache
- Firefox GeckoDriver不支持鼠标悬停
- 新装谷歌浏览器拦截Flash插件解决方案
- 面向对象设计原则
- B1022
- torch中创建multitask网络结构
- 前端到后台ThinkPHP开发整站(1)