Работа с изменением ориентации в моно для Android - PullRequest
0 голосов
/ 02 апреля 2012

Я использовал следующий фрагмент кода для своей деятельности, чтобы справиться с изменением ориентации.

[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, если и иначе оба выполняются.

Я понятия не имею, почему это происходит.

Я абсолютный новичок в Mono дляAndroid , поэтому любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 21 сентября 2012

Вот мой код

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 голос
/ 02 апреля 2012

попробуйте это работает ...

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) Добавить строку ниже в файле активности manifeast:

android:configChanges="keyboardHidden|orientation"
0 голосов
/ 02 апреля 2012

Я вставляю код здесь .. попробуйте это ..

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 ..   
            }               
    }

Вызовите метод Like;

  @Override
public void onCreate(Bundle savedInstanceState) 
{
        onConfigurationChanged(getResources().getConfiguration());
    }
...