屏幕適配常見方式git
佈局適配github
圖片資源適配bash
用戶流程適配app
屏幕適配自定義Viewide
百分比佈局適配佈局
public class Density {
private static final float WIDTH = 320;//參考設備的寬,單位是dp 320 / 2 = 160
private static float appDensity;//表示屏幕密度
private static float appScaleDensity; //字體縮放比例,默認appDensity
public static void setDensity(final 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(Configuration newConfig) {
//字體發生更改,從新對scaleDensity進行賦值
if (newConfig != null && newConfig.fontScale > 0){
appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity;
}
}
@Override
public void onLowMemory() {
}
});
}
//計算目標值density, scaleDensity, densityDpi
float targetDensity = displayMetrics.widthPixels / WIDTH; // 1080 / 360 = 3.0
float targetScaleDensity = targetDensity * (appScaleDensity / appDensity);
int targetDensityDpi = (int) (targetDensity * 160);//屏幕上每一寸有160個像素點
//替換Activity的density, scaleDensity, densityDpi
DisplayMetrics dm = activity.getResources().getDisplayMetrics();
dm.density = targetDensity;
dm.scaledDensity = targetScaleDensity;
dm.densityDpi = targetDensityDpi;
}
}
複製代碼
劉海屏 適配字體
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
複製代碼
劉海屏的幾種模式ui
WindowManager.LayoutParams params = window.getAttributes();
/**
* * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 全屏模式,內容下移,非全屏不受影響
* * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 容許內容去延伸進劉海區
* * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 不容許內容延伸進劉海區
*/
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(params);
複製代碼
追加沉浸式spa
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
int visibility = window.getDecorView().getSystemUiVisibility();
visibility |= flags; //追加沉浸式設置
window.getDecorView().setSystemUiVisibility(visibility);
複製代碼
其餘手機廠商(華爲,小米,oppo,vivo)適配設計
謝謝你們的閱讀,想要了解更多,請關注我