以设计图 为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;
}
}
结合起来完美适配