开发过程中切图越多越好吗? 图标的大小怎么切 72x72 ,48x48,96x96,144x144,192x192 一般切多少套图片? 如果能用一套图片解决问题,就一套就够了 能不用图片就不用图片,shap资源 drawable-ldpi drawable-mdpi drawable-hdpi drawable-xhdpi drawable-xxhdpi
Android开发者在做图片适配时需要注意一下两点
1、盛放图片的控件要用dip单位来定义其长宽。
2、 最好在ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹下提供大小比例为3:4:6:8:12的图片。当然如果有质量好的.9.png图片的话,提供一个也可以。
|
针对1280x720这样的屏幕做特定的ui效果
布局文件的适配,使用得比较少。
|
//
要求: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
) (screenHeigh
t*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 );
|
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-分辨率目录 ,来指定设备的宽度。
|
源码分析 : http://blog.csdn.net/lmj623565791/article/details/46695347 |
导入: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
即可。
|
<TextView android:layout_width="0dp" android:layout_height="0dp" android:layout_gravity="right|top" android:gravity="center" android:background="#4400ff00" android:text="width:70%,height:20%" app:layout_heightPercent="20%" app:layout_widthPercent="70%"/> |
封装自定义的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">
|
|
主要是基于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的位置非常好控制,从而能够减少非常多的嵌套,甚至任何一个复杂的界面做到无嵌套。
|
下面是两个屏幕相差很大的手机显示样例: 见sample
左为:768 * 1280 ; 右为:1080 * 1920
|