1. 程式人生 > >Android最簡單屏幕適配,項目用dp,sp的只需加一行代碼

Android最簡單屏幕適配,項目用dp,sp的只需加一行代碼

img use pause xtend 簡書 nth 初始 分辨 sca

AutoScreenAdaptation

安卓屏幕適配 項目直接用dp和sp的可以不用改動 直接加入一句代碼即可實現適配

還未確定會不會有兼容性問題和性能問題 需要時間測試

目前測試過模擬器的不同分辨率和不同dpi基本效果不會差太多

旋轉屏幕 布局會按橫版的大小縮放 視圖也不會亂

支持x y適配

效果圖

技術分享
720x1280 技術分享
480x800

主要代碼

public classScreenAdaptation {

privateApplication.ActivityLifecycleCallbacksactivityLifecycleCallbacks;

privateApplicationmApplication;

private floatmWidth=720;

private floatmHeight=1280;

publicScreenAdaptation(Application application,floatwidth,intheight) {

mApplication= application;

mWidth= width;

mHeight= height;

activityLifecycleCallbacks=newApplication.ActivityLifecycleCallbacks() {

@Override

public voidonActivityCreated(Activity activity, Bundle savedInstanceState) {

//開啟Activity才執行

resetDensity(activity,mWidth,mHeight);

}

@Override

public voidonActivityStarted(Activity activity) {

}

@Override

public voidonActivityResumed(Activity activity) {

}

@Override

public voidonActivityPaused(Activity activity) {

}

@Override

public voidonActivityStopped(Activity activity) {

}

@Override

public voidonActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public voidonActivityDestroyed(Activity activity) {

}

};

}

/**

*註冊

*/

public voidregister(){

resetDensity(mApplication,mWidth,mHeight);

mApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);

}

/**

*註銷

*/

public voidunregister(){

//設置為默認

mApplication.getResources().getDisplayMetrics().setToDefaults();

mApplication.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);

}

/**

* dp適配getResources().getDisplayMetrics().density

* sp適配getResources().getDisplayMetrics().scaledDensity

* pt適配getResources().getDisplayMetrics().xdpi

[email protected]

[email protected]

[email protected]

*/

private static voidresetDensity(Context context,floatwidth ,floatheight){

Point point =newPoint();

//獲取屏幕的數值

((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getSize(point);

//dp適配getResources().getDisplayMetrics().density

context.getResources().getDisplayMetrics().density= point.x/width*2f;

context.getResources().getDisplayMetrics().density= point.y/height*2f;

//sp適配getResources().getDisplayMetrics().scaledDensity

context.getResources().getDisplayMetrics().scaledDensity= point.x/width*2f;

context.getResources().getDisplayMetrics().scaledDensity= point.y/height*2f;

}

}

使用:

public classAppextendsApplication{

@Override

public voidonCreate() {

super.onCreate();

//需要傳入ui設計給的大小,初始化

newScreenAdaptation(this,720,1280).register();

}

}



作者:溫開創
鏈接:http://www.jianshu.com/p/97b107308923
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

Android最簡單屏幕適配,項目用dp,sp的只需加一行代碼