Android-螢幕適配
阿新 • • 發佈:2022-03-19
自定義控制元件 px 螢幕不同解析度適配
/** * Created by AS. * * @author lol_tww * @time on 2022/3/19 * @describe describe */ public class Util { private static Util sUtil; //預設裝置的寬高 private static final float STANDARD_WIDTH = 720; private static final float STANDARD_HEIGHT = 1280; private int mDisplayWidth; private int mDisplayHeight; private Util(Context applicationContext){ //獲取螢幕的寬高 if(mDisplayHeight == 0 || mDisplayWidth ==0){ WindowManager manager = (WindowManager) applicationContext.getSystemService(Context.WINDOW_SERVICE); if(manager !=null){ DisplayMetrics displayMetrics = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(displayMetrics); if(displayMetrics.widthPixels > displayMetrics.heightPixels){ //橫屏 mDisplayWidth = displayMetrics.heightPixels; mDisplayHeight = displayMetrics.widthPixels; }else { mDisplayWidth = displayMetrics.widthPixels; mDisplayHeight = displayMetrics.heightPixels-getStatusBarHeight(applicationContext); } } } }; //狀態列的高度 public int getStatusBarHeight(Context context){ int resID = context.getResources().getIdentifier("status_bar_height","dimen","android"); if(resID > 0){ return context.getResources().getDimensionPixelSize(resID); } return 0; } //水平方向縮放比例,解析度不同 public float getHorizontalScale(){ return mDisplayWidth /STANDARD_WIDTH; } //垂直方向縮放比例,解析度不同 public float getVerticalScale(){ return mDisplayWidth /STANDARD_HEIGHT; } public static Util getInstance(Context context){ if(sUtil == null){ sUtil = new Util(context.getApplicationContext()); } return sUtil; } }
螢幕適配 --畫素密度
/** * Created by AS. * * @author lol_tww * @time on 2022/3/19 * @describe describe */ public class Density { private static final float WIDTH = 360; //預設裝置的寬 單位dp private static float appDensity;//螢幕密度 private static float appScaleDensity;//字型縮放比例,預設appDensity public static void setDensity(Application application, Activity activity){ //獲取當前app的螢幕顯示資訊 DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics(); if(appDensity == 0){ //初始化 appDensity = displayMetrics.density; appScaleDensity = displayMetrics.scaledDensity; //新增字型變化監聽回撥 application.registerComponentCallbacks(new ComponentCallbacks() { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { //字型發生改變 if(newConfig != null && newConfig.fontScale>0){ appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity; } } @Override public void onLowMemory() { } }); } //獲取目標density float targetDensity = displayMetrics.widthPixels /WIDTH; float targetScaleDensity = targetDensity * (appScaleDensity/appDensity); int targetDensityDpi = (int) (targetDensity *160); //替換Activity 的density,scaleDensity,densityDpi; DisplayMetrics dm = activity.getResources().getDisplayMetrics(); dm.density = targetDensity; dm.scaledDensity = targetScaleDensity; dm.densityDpi = targetDensityDpi; } }