我允许我的应用程序的所有可能的方向为纵向和横向(小 - 正常 - 大 - xlarge)但在小屏幕上测试后,我只是不喜欢如何它似乎是这样,我想要做的是禁用小布局的横向。有没有办法做到这一点 ?
我发现只是对清单文件进行了更改,但我相信通过重新配置清单,我会将更改应用于所有布局。
答案 0 :(得分:9)
最简单的方法是将它放在所有活动的onCreate()
方法中(更好的是,将它放在BaseActivity类中并从中扩展所有活动)
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (isLargeDevice(getBaseContext())) {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
} else {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
您可以使用此方法检测设备是手机还是平板电脑:
private boolean isLargeDevice(Context context) {
int screenLayout = context.getResources().getConfiguration().screenLayout;
screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenLayout) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
return false;
case Configuration.SCREENLAYOUT_SIZE_LARGE:
case Configuration.SCREENLAYOUT_SIZE_XLARGE:
return true;
default:
return false;
}
}
答案 1 :(得分:0)
检查此链接,您可以检查设备类型并根据需要设置方向
Android: allow portrait and landscape for tablets, but force portrait on phone?
答案 2 :(得分:0)
你可以编程handle runtime configuration changes那样
你的清单中的:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
在您的活动中
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
///check the screen size and change it to potrait
}
}
或检查this answer以查看如何检查屏幕尺寸并进行更改
答案 3 :(得分:-1)
例如480个屏幕尺寸的设备:在oncreate方法中应用:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
if(width==480){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}