效果图:public class ScreenAdaptation { private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks; private Application mApplication; private float mWidth = 720; private float mHeight = 1280; public ScreenAdaptation(Application application, float width, int height) { mApplication = application; mWidth = width; mHeight = height; activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { //开启Activity才执行 resetDensity(activity, mWidth, mHeight); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }; } /** * 注册 */ public void register() { resetDensity(mApplication, mWidth, mHeight); mApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks); } /** * 注销 */ public void unregister() { //设置为默认 mApplication.getResources().getDisplayMetrics().setToDefaults(); mApplication.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks); } /** * dp适配getResources().getDisplayMetrics().density * <p> * sp适配getResources().getDisplayMetrics().scaledDensity * <p> * pt适配getResources().getDisplayMetrics().xdpi * * @paramcontext * @paramwidthui设计图的宽度 * @paramheightui设计图的高度 */ private static void resetDensity(Context context, float width, float height) { Point point = new Point(); //获取屏幕的数值 ((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; } }
在Application类的onCreate方法中调用
new ScreenAdaptation(this,720,1280).register();
上面就是全部的代码了。
本文深入探讨了Android应用中的屏幕适配技术,提供了一个名为ScreenAdaptation的类,用于根据UI设计图的尺寸调整应用的密度参数,确保在不同分辨率的设备上都能正确显示。通过在Application的onCreate方法中注册适配器,可以自动调整dp、sp和pt单位,实现跨设备的一致性布局。
769

被折叠的 条评论
为什么被折叠?



