Android-屏幕适配
自定义控件 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;
}
}
分类:
Android
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!