android提供了多个文件夹来解决适配问题,可这会导致应用程序的大小很大,对于ui较多的应用不太可取。
目前大多数应用都是提供了一套hdpi的图,andorid根据手机屏幕的大小是会做自动适配的。
如果你想让这些改变更可控,可以尝试如下做法。
做一套符合当前主流手机的图(比如以800宽的屏幕为基准的图片)。尽量做hdpi或者xhdpi的图 ,以免缩放时丢失像素。
首先通过如下方法获取当前手机的宽高。
final DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final int height = displayMetrics.heightPixels;
final int width = displayMetrics.widthPixels;
再通过如下的工具类,根据当前手机的宽高,算出需要缩放的比例。
public class AdaptationClass {
private final static float FINAL_WIDTH = 800; //你所提供的一套图的基准宽度
float Coefficient_X;
public AdaptationClass(float width, float height,float density) {
this.Coefficient_X = width / FINAL_WIDTH;
}
public int changeImage(int w) {
return Math.round(Coefficient_X * w);
}
}
如果图片的宽是415像素,那么在设置图片宽度的时候调用即可自动转换成适应当前屏幕的像素值。图片的宽出来后,高度可以根据图片的宽高比算出。
LayoutParams lp = new LayoutParams(changeImage(415),changeImage(415)*高宽比);
或者LayoutParams lp = new LayoutParams(changeImage(415),changeImage(高度));
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(lp);
对于高度较大的图片,可以考虑放在scrollview中,以免有些手机显示不全。
有些图片直接设为background,在不同的分辨率下会变形。
可以考虑通过FrameLayout中放imageview的方式解决。(imageview的宽高可通过设置LayoutParam在程序中根据手机屏幕大小动态生成)
应用的欢迎界面可以采用纯色背景+imageview实现,imageView的ScaleType设为centerInside,纯色边界可以很大程度规避显示不全的问题。
jpg格式要比png的小很多,所以在没有透明要求的情况下尽量使用jpg格式。