以设计图 为540dp*960dp为例
1、如果直接写死,手机上看着挺舒服但是平板 打开 炒鸡大
2、而且网上一些写法横竖屏切换时候 会出现布局紊乱的情况。
3、平板开启重力感应 固定竖向的页面横屏也会横在中间。
本文用到两种屏幕方向
SCREEN_ORIENTATION_USER_LANDSCAPE SCREEN_ORIENTATION_USER_PORTRAIT
解决方式
//清单文件别忘了引用 //app的清单文件中设置activity方向为userPortrait(竖向) public class MyApp extends BaseApplication { public static int SysWidth; public static int SysHeight; public static int SysWidthConfig; public static int SysHeightConfig; @Override public void onCreate() { super.onCreate(); SysWidth = ResUtil.getScreenWidth();//竖屏进入 获取屏幕宽度 SysHeight = ResUtil.getScrennHeight();//竖屏进入 获取屏幕高度 SysWidthConfig = Math.max(SysWidth / 2, 540); SysHeightConfig = Math.max(SysHeight / 2, 960); initAuto();//这一段保证平板 } private void initAuto() { AutoSizeConfig.getInstance().setOnAdaptListener(new onAdaptListener() { @Override public void onAdaptBefore(Object target, Activity activity) { if (activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT) { doPorTraitShow(); } else { doLandShow(); } } @Override public void onAdaptAfter(Object target, Activity activity) { } }); } public static void doPorTraitShow() { AutoSizeConfig.getInstance().setScreenWidth(SysWidth); AutoSizeConfig.getInstance().setScreenHeight(SysHeight); AutoSizeConfig.getInstance() .setDesignWidthInDp(SysWidthConfig); } public static void doLandShow() { AutoSizeConfig.getInstance().setScreenWidth(SysHeight); AutoSizeConfig.getInstance().setScreenHeight(SysWidth); AutoSizeConfig.getInstance() .setDesignWidthInDp(SysHeightConfig); } }
//这一段 保证手机运行 public abstract class MyBaseActivity extends AppCompatActivity{ ..... @Override public Resources getResources() { runOnUiThread(() -> {//为啥这么写呢? 不这么写会在横竖切屏时候卡死 AutoSizeCompat.autoConvertDensityOfGlobal(super.getResources());//如果没有自定义需求用这个方法 AutoSizeCompat.autoConvertDensity(super.getResources(), getSize(), true);//如果有自定义需求就用这个方法 }); return super.getResources(); } public float getSize() { int pos = getPotPos(); if (....) {//需要横屏的时候 getLandPos(); } return pos; } private int getLandPos() { AutoSizeConfig.getInstance().setScreenWidth(MyApp.SysHeight); AutoSizeConfig.getInstance().setScreenHeight(MyApp.SysWidth); return MyApp.SysHeightConfig; } private int getPotPos() { AutoSizeConfig.getInstance().setScreenWidth(MyApp.SysWidth); AutoSizeConfig.getInstance().setScreenHeight(MyApp.SysHeight); return MyApp.SysWidthConfig; } }
结合起来完美适配