在android的mono中处理方向更改
本文关键字:方向 处理 android mono | 更新日期: 2023-09-27 18:29:46
我在活动中使用了以下代码片段来处理方向更改。
[Activity (Label = "Activity",ConfigurationChanges = ConfigChanges.Orientation
| ConfigChanges.KeyboardHidden)]
和
public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
{
base.OnConfigurationChanged (newConfig);
if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
{
Console.WriteLine("landscape");
}
else if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait)
{
Console.WriteLine("portrait");
}
}
我从Portrait
模式开始,然后切换到Landscape mode
,然后再次切换回Portrait
模式。因此,预期输出应该是:
landscape
portrait
但是控制台输出显示
landscape
landscape
portrait
即从Landscape mode
模式切换到Portrait
模式时,执行if和else。
我不知道为什么会发生这种事。
我绝对是Android版单声道的初学者,所以非常感谢您的帮助。
这是我的代码
if (Resources.Configuration.Orientation == Android.Content.Res.Orientation.Landscape)
{
SetContentView(Resource.Layout.Main); //set layout for Landscape mode
}
else
{
SetContentView(Resource.Layout.MainPortrait); //set layout for Portrait mode
}
试试它的工作。。。
1) 声明以上oncreate()
int prev_orientation =0;
2) 覆盖以下方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
int orientation = getResources().getConfiguration().orientation;
if(prev_orientation!=orientation){
prev_orientation = orientation;
if(orientation ==1){
//por
Toast.makeText(getApplicationContext(),"ort::pot"+orientation,Toast.LENGTH_LONG).show();
}else if(orientation ==2){
//land
Toast.makeText(getApplicationContext(),"ort::land"+orientation,Toast.LENGTH_LONG).show();
}
}
super.onConfigurationChanged(newConfig);
}
3) 在活动的manifest文件中添加以下行:
android:configChanges="keyboardHidden|orientation"
我正在此处粘贴代码。。试试这个。。
public void onConfigurationChanged(Configuration orient)
{
super.onConfigurationChanged(orient);
// Checks the orientation of the screen
if (orient.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
//code here for LANDSCAPE..
));
}
else if (orient.orientation == Configuration.ORIENTATION_PORTRAIT)
{
//code here for PORTRAIT ..
}
}
调用类似方法;
@Override
public void onCreate(Bundle savedInstanceState)
{
onConfigurationChanged(getResources().getConfiguration());
}