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

來源:互聯網
上載者:User

標籤:cti   led   gis   bsp   default   pause   idt   ide   lifecycle   

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

*@paramcontext

*@paramwidthui設計圖的寬度

*@paramheightui設計圖的高度

*/

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的只需加一行代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.