最近研究了一下android屏幕适配方案, 其实网上特别多的适配但是 我就感觉写的好高大上啊,但是一用到就是各种布局错乱 不能适配各种机型 。
小生不才写了一个简单的适配方案 你的布局里面的dp还是用你的dp ,什么都不用改变,你只需要几行子的代码 就可以搞定
当然 这个适配 不可能是万能的适配所有的手机,毕竟市面上手机就是大杂烩啊,程序员的我表示很心痛,好了废话我就不说了,相信你已经搜索了好多废话连篇的文章了;好吧我开始我的表演了,群众们鼓个掌吧
首先来看一下吧
密度 分辨率
ldpi 0.75 320*240
mdpi 1 480*320
hdpi 1.5 800*480
xhdpi 2.0 1280*720
xxhdpi 3.0 1080x1920
我们要利用这个类
这个只是核心的代码
activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { //这个是监听所有的activity
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
density(activity, mWidth,mHeight); //我们在这里获取activity
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
private static void density(Context context, float width , float height){
Point point = new Point();
((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getSize(point); //获取屏幕的数值
context.getResources().getDisplayMetrics().density = point.x/width*2f; //context是我们获取activity里面的上下文 设置密度值 屏幕的宽/我们自己设置的主流分辨率*2f(表示这个主流分辨率的密度值这里以720*1280为准)
context.getResources().getDisplayMetrics().density = point.y/height*2f;
}
public void start(){
resetDensity(mApplication, mWidth,mHeight); //里面的参数是类的构造方法保存过的
mApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}