我只想在我的方向处于横向时设置一些标志,这样当在onCreate()中重新创建活动时,我可以在纵向和横向加载的内容之间切换。我已经有了一个处理我的布局的layout-land xml。
public void onConfigurationChanged(Configuration _newConfig) {
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
this.loadURLData = false;
}
if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
this.loadURLData = true;
}
super.onConfigurationChanged(_newConfig);
}
覆盖onConfigurationChanged将阻止我的layout-land xml以横向方向加载。
我只想在onCreate()中获取设备的当前方向。我怎么能得到这个?
答案 0 :(得分:433)
Activity.getResources().getConfiguration().orientation
答案 1 :(得分:53)
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// code for portrait mode
} else {
// code for landscape mode
}
当this
的超类是Context
答案 2 :(得分:27)
在某些设备void onConfigurationChanged()
可能会崩溃。用户将使用此代码获取当前屏幕方向。
public int getScreenOrientation()
{
Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
int orientation = Configuration.ORIENTATION_UNDEFINED;
if(getOrient.getWidth()==getOrient.getHeight()){
orientation = Configuration.ORIENTATION_SQUARE;
} else{
if(getOrient.getWidth() < getOrient.getHeight()){
orientation = Configuration.ORIENTATION_PORTRAIT;
}else {
orientation = Configuration.ORIENTATION_LANDSCAPE;
}
}
return orientation;
}
并使用
if (orientation==1) // 1 for Configuration.ORIENTATION_PORTRAIT
{ // 2 for Configuration.ORIENTATION_LANDSCAPE
//your code // 0 for Configuration.ORIENTATION_SQUARE
}
答案 3 :(得分:22)
int rotation = getWindowManager().getDefaultDisplay().getRotation();
这将提供正常和反向的所有方向
并像
一样处理它int angle = 0;
switch (rotation) {
case Surface.ROTATION_90:
angle = -90;
break;
case Surface.ROTATION_180:
angle = 180;
break;
case Surface.ROTATION_270:
angle = 90;
break;
default:
angle = 0;
break;
}
答案 4 :(得分:12)
getActivity().getResources().getConfiguration().orientation
此命令返回纵向的值1和纵向的
的2答案 5 :(得分:5)
如果有人希望获得meaningful方向说明(例如与onConfigurationChanged(..)
,reverseLandscape
等传递给sensorLandscape
的说明),只需使用{{3 }}
答案 6 :(得分:1)
在您的活动类中,使用以下方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setlogo();// Your Method
Log.d("Daiya", "ORIENTATION_LANDSCAPE");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
setlogoForLandScape();// Your Method
Log.d("Daiya", "ORIENTATION_PORTRAIT");
}
}
然后,要声明您的活动处理配置更改,请编辑清单文件中的相应元素,以包含android:configChanges
属性,其中包含表示要处理的配置的值。 android:configChanges
属性的文档中列出了可能的值(最常用的值为&#34;方向&#34;以防止在屏幕方向更改时重新启动和&#34; keyboardHidden&#34;以防止重新启动当键盘可用性发生变化时)。您可以通过使用管道分隔属性来声明属性中的多个配置值字符。
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
那就是!!
答案 7 :(得分:0)
如果你想覆盖那个onConfigurationChanged方法并仍然希望它做基本的东西,那么考虑使用super.onConfigyrationChanged()作为overriden方法中的第一个语句。
答案 8 :(得分:0)
我只想提出另一个与您有关的替代方案:
android:configChanges="orientation|keyboardHidden"
意味着我们明确声明要注入的布局。
如果要保留自动注入功能,请使用layout-land和layout文件夹。您所要做的就是将其添加到onCreate中:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
getSupportActionBar().hide();
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
getSupportActionBar().show();
}
在这里,我们是否显示操作栏,具体取决于手机的方向