Android屏幕适配--六大适配方法(你必须知道)
来源:互联网 发布:张家口seo公司 编辑:程序博客网 时间:2024/05/21 19:38
u 首先阐释一些术语和概念
Ø 屏幕尺寸(screen size):实际的物理尺寸,屏幕的对角线测量。为了方便,Android把所有的屏幕尺寸分为了4个广义的大小:小、正常、大、更大。
Ø 屏幕密度(screen density):屏幕占据的物理区域所含像素的个数,通常被称为dpi(dots per inch)即每英寸的像素点数。
Ø 分辨率(resolution):屏幕上物理像素的点数。例如,有一个240px*400px的屏幕,可以理解为在这个屏幕上横着有400条线,每条线上有240个像素点。
Ø 像素(px):屏幕上的点。
Ø dip(dp):Density-independent pixel--->与密度无关的像素(下面将详细讲解)
1.图片适配
开发过程中切图越多越好吗? 图标的大小怎么切 72x72 ,48x48,96x96,144x144,192x192 一般切多少套图片? 如果能用一套图片解决问题,就一套就够了 能不用图片就不用图片,shap资源 drawable-ldpi drawable-mdpi drawable-hdpi drawable-xhdpi drawable-xxhdpi
当同名的一张图片mm.jpg ,但内容不同图片,分别放置不同的目录,手机会更加当前屏幕密度,加载不同的图片。
Android开发者在做图片适配时需要注意一下两点
1、盛放图片的控件要用dip单位来定义其长宽。
2、 最好在ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹下提供大小比例为3:4:6:8:12的图片。当然如果有质量好的.9.png图片的话,提供一个也可以。
2.布局适配
针对1280x720这样的屏幕做特定的ui效果
布局文件的适配,使用得比较少。
3.代码适配
//要求:v,v,v,v·直鹕柚每矶任聊坏目淼?/,/,/,全部填充;高默认
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int screenHeight = getWindowManager().getDefaultDisplay(). getHeight();
LayoutParams params = new LayoutParams(( int) (0.25* screenWidth), (int) (screenHeight*0.1));
tv1.setLayoutParams(params );
params = new LayoutParams((int) ( 0.5*screenWidth), (int ) (screenHeight*0.1));
tv2.setLayoutParams(params );
params = new LayoutParams((int) ( 0.75*screenWidth), (int ) (screenHeight*0.1));
tv3.setLayoutParams(params );
params = new LayoutParams(screenWidth, ( int) (screenHeight*0.1) );
tv4.setLayoutParams(params );
4.权重适配
这个不用多说
5.尺寸适配
dip转成像素 : dp*密度比 = 像素===> 每个手机的密度比不一样
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
1_尺寸基本单位
px 像素 不同设备显示效果相同
dip或者dp device independent pixels(设备独立像素). 不同设备有不同的显示效果 ,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dip转成像素 : dp*密度比 = 像素
每个手机的密度比不一样
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
屏幕密度:开根(屏幕宽的平方+屏幕高的平方)/屏幕的尺寸
float density = getResources().getDisplayMetrics().density;
System.out.println("当前手机的屏幕密度比是:" +density);
特殊的设备(平板电脑)宽度和高度的比例和手机是不一样的,密度比是没有办法实现所有设备的适配,使用dimension.xml文件独立去声明单位,并且针对特殊的设备创建一个values-分辨率目录 ,来指定设备的宽度。
6.百分比适配
Android5.0之后引入百分比适配
导入:compile 'com.android.support:percent:22.2.0'
布局中加: xmlns:app="http://schemas.android.com/apk/res-auto"
宽高都设为0先
支持的属性有:
layout_widthPercent
、layout_heightPercent
、 layout_marginPercent
、layout_marginLeftPercent
、 layout_marginTopPercent
、layout_marginRightPercent
、 layout_marginBottomPercent
、layout_marginStartPercent
、layout_marginEndPercent
只要在开发过程中使用
PercentRelativeLayout
、PercentFrameLayout
替换FrameLayout
、RelativeLayout
即可。封装自定义的PercentLinearLayout
测试的布局
详情链接: http://blog.csdn.net/lmj623565791/article/details/46767825
扩展:官方库有局限地方,做了初步扩展,慎用.
当使用图片时,无法设置宽高的比例,很难使用百分比定义一个正方形的控件,一个控件的margin四个方向值一致
使用方法:
compile 'com.zhy:percent-support-extends:1.0.1'
三个类分别为
com.zhy.android.percent.support.PercentLinearLayout com.zhy.android.percent.support.PercentRelativeLayout com.zhy.android.percent.support.PercentFrameLayout
用法:在原有基础上设置宽高百分比时指明分辨参数
app:layout_heightPercent="50%w"
app:layout_widthPercent="50%w">
更通用的基于重封装px属性的适配:
主要是基于Google推出的百分比布局,已经很大程度解决了适配的问题。
但在实际工作中,存在一些问题:
因为设计图上标识的都是px,所以需要去计算百分比,然后这个百分比还是依赖父容器的,设计图可能并不会将每个父容器的尺寸都标识出来
还有个问题就是,因为依赖于父容器,导致ScrollView,ListView等容器内高度无法使用百分比。
我们需要一种更人性化的适应性更广更牛X的: 拿到设计图,不需要额外计算,布局直接抄设计图上的尺寸,不产生任何多余的资源文件,完成各种分辨率的适配!
特别说明:
: 这个px并不代表1像素,内部会进行百分比化处理 ,也就是说:720px高度的屏幕,你这里填写72px,占据10%;当这个布局文件运行在任何分辨率的手机上,这个72px都代表10%的高度,这就是本库适配的原理。
用方法:
引入Android Studio
将autolayout引入
dependencies { compile 'com.zhy:autolayout:1.4.3' }
(1)在你的项目的AndroidManifest中注明你的设计稿的尺寸。
<meta-data android:name="design_width" android:value="768"></meta-data>
<meta-data android:name="design_height" android:value="1280"></meta-data>
(2)Activity中开启设配
让你的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
然后就可以尽情的布局玩耍了~
扩展部分 注意的点:
1.要看到实时的预览效果,
首先,你要记得你设计稿的尺寸,比如 768 * 1280,然后在你的PreView面板,选择分辨率一致的设备.
2.由于该库的特点,布局文件中宽高上的1px是不相等的,于是如果需要宽高保持一致的情况,布局中使用属性:
app:layout_auto_basewidth="height",代表height上编写的像素值参考宽度app:layout_auto_baseheight="width",代表width上编写的像素值参考高度。
如果需要指定多个值参考宽度即:app:layout_auto_basewidth="height|padding"
3.用|隔开,类似gravity的用法,取值为:
width,height
margin,marginLeft,marginTop,marginRight,marginBottom
padding,paddingLeft,paddingTop,paddingRight,paddingBottom
textSize.
4.对于ListView这类控件的item,默认根局部写“px”进行适配是无效的,因为外层非AutoXXXLayout,而是ListView。但是,一行代码就可以支持了:
@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);
}
5.TextView的高度问题
设计稿一般只会标识一个字体的大小,比如你设置textSize="20px",实际上TextView所占据的高度肯定大于20px,字的上下都会有一定的建议,所以一定要灵活去写字体的高度,比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位
优点:
此库不会影响系统所有的其他属性,以及不会影响dp,sp的使用
通过本库的方式去编写代码,可以在很大程序上使用margin,也就是说,对于View的位置非常好控制,从而能够减少非常多的嵌套,甚至任何一个复杂的界面做到无嵌套。
阅读全文
0 0
- Android屏幕适配--六大适配方法(你必须知道)
- Android屏幕适配--六大适配方法(你必须知道)
- Android屏幕适配--六大适配方法
- Android屏幕适配方法
- Android屏幕适配方法
- Android的屏幕适配方法
- android官方提供屏幕适配方法
- android屏幕的适配方法
- Android 屏幕的适配方法
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的 Android 拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- 你需要知道的Android拍照适配方案
- IT的伦理与道德
- I盘无法访问文件或目录损坏且无法读取,里面的文件如何找回
- 使用MVP+Retrofit+RXJava实现仿京东分类
- Opencv QT 环境搭建
- jquer隐藏显示淡入淡出
- Android屏幕适配--六大适配方法(你必须知道)
- ButterKnife注解RadioGroup的一些问题
- 依赖
- form表单验证,添加数据显示
- hdfs版本引起的问题check-sum mismatch between
- 知识学习——jQuery事件
- 转自RObin 大佬的代码
- UVA11077 Find the Permutations(排列统计)
- 怎样才能赚到钱系列(十一):拥抱变化的世界