在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模式时,执行ifelse

我不知道为什么会发生这种事。

我绝对是Android版单声道的初学者,所以非常感谢您的帮助。

在android的mono中处理方向更改

这是我的代码

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());
    }