ipad屏幕适配
1.android:screenOrientation="unspecified|portrait|landscape"
2.adb shell getprop ro.sf.lcd_density //dpi=400
sw-xxxx-dp中的xxxx的计算公式是 sw *160/dpi
屏幕分辨率1920X1080
xxxx=1080*160/400=432
2、android:name=".ui.main.MainActivity"
android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenSize|smallestScreenSize|layoutDirection|screenLayout"
android:hardwareAccelerated="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="unspecified"
android:taskAffinity="com.huawei.vassistant"
android:windowSoftInputMode="adjustUnspecified|stateAlwaysHidden">
3、android:name=".ui.translation.TranslationActivity"
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|layoutDirection|screenLayout"
android:hardwareAccelerated="true"
android:label="@string/content_description_trans_activity"
android:launchMode="singleTask"
android:screenOrientation="unspecified"
android:windowSoftInputMode="adjustPan">
一般在AndroidManifest.xml文件中都没有使用到android:configChanges="keyboardHidden|orientation"配置,当然还是很有用的。
就是如果配置了这个属性,当我们横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法,那当然如果不配置这个属性的话就会重新调用onCreate方法了。http://www.cnblogs.com/carlo/p/4311010.html
5、private void startOrientationListener() {//设置屏幕旋转监听
mOrientationEventListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int i) {
if (i < 0) return;
if (!isRotationOn()) {
if (isTablet()) {
int currentSystemLockedOrientation = getSystemLockedScreenOrientation();
if (currentSystemLockedOrientation % 2 == 0) {
setOrientationChanged(ORIENTATION_PORTRAIT);
} else {
setOrientationChanged(ORIENTATION_LANDSCAPE);
}
}
return;
}
int orientation;
if ((70 <= i && i <= 110) || (250 <= i && i <= 290)) {
orientation = ORIENTATION_LANDSCAPE;
} else {
orientation = ORIENTATION_PORTRAIT;
}
VALog.i(TAG, "angle = " + i + " currentorientation = " +mCurrentOrientation+ " noworientation = " + orientation);
if (mHandler.hasMessages(HANDLER_MSG_SET_REQUESTED_ORIENTATION)) {
mHandler.removeMessages(HANDLER_MSG_SET_REQUESTED_ORIENTATION);
}
Message msg = mHandler.obtainMessage(HANDLER_MSG_SET_REQUESTED_ORIENTATION, orientation);
mHandler.sendMessageDelayed(msg, 200);
}
};
mOrientationEventListener.enable();
}
public boolean isRotationOn() {//判断是否旋转
int status = 0;
try {
status = android.provider.Settings.System.getInt(
getContentResolver(),
android.provider.Settings.System.ACCELEROMETER_ROTATION);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
if (status == 0) {
return false;
} else {
return true;
}
}
public boolean isTablet() {//判断是不是平板
return (getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
public int getSystemLockedScreenOrientation(){//判断锁屏方向
int status = 0;
try {
status = android.provider.Settings.System.getInt(
getContentResolver(),
android.provider.Settings.System.USER_ROTATION);
} catch (Settings.SettingNotFoundException e) {
VALog.e(TAG, "getSystemLockedScreenOrientation" + e.getMessage());
}
return status;
}
6、代码设置控件Margin
if (!isTablet()) {
VAUtils.setMarginRightPercentOfScreen(VAssistantConfig.getAppContext(), mBtnTranslation, 0.16);
VAUtils.setMarginRightPercentOfScreen(VAssistantConfig.getAppContext(), mBtnHelp, 0.16);
} else {
VAUtils.setMarginRightPercentOfScreen(VAssistantConfig.getAppContext(), mBtnTranslation, 0.05);
VAUtils.setMarginRightPercentOfScreen(VAssistantConfig.getAppContext(), mBtnHelp, 0.05);
}
}
7、public class VAOrientationControlSetting {//控制界面方向工具类
private static int mOritentation;
public static void setOritentation(int mOritentation) {
VAOrientationControlSetting.mOritentation = mOritentation;
}
public static void setOritention(Activity mActivity) {
if (VAUtils.isTablet()) {
if (mOritentation == Configuration.ORIENTATION_LANDSCAPE) {
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);//设置界面为横屏mOritentation==activity.getResources().getConfiguration().orientation;
} else {
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT);//设置界面为竖屏
}
} else {
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT);
}
}
}