2016-04-20 2 views
0

Как можно настроить ориентацию приложения в зависимости от того, какая ориентация была использована при запуске приложения?Android keep Orientation from app Начать

Пример

Под этим я имею в виду позволяет сказать, что пользователь начал свое приложение в ландшафтном. O хотел бы, чтобы он сохранил это состояние и не позволял пользователю изменять ориентацию, прерывая телефон (я хочу заблокировать его, пока пользователь не перезапустит приложение, а оттуда приложение снова проверит, начал ли пользователь его пейзаж или портрет)

КОД (до сих пор)

Configuration newConfig = getResources().getConfiguration(); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
      // set background for landscape through app 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 

    Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
      // set background for portrait through app 
    } 

Это было что-то я нашел здесь на SO. Могу ли я сделать это так? Поместите это в мою первую деятельность, а затем используйте состояние ориентации отсюда для остальных видов активности.

ответ

2

Вы можете использовать SharedPreferences для хранения значение, которое будет сохранено, даже если приложение будет закрыто.
Просто сделайте класс SaveOrientation:

public class SaveOrientation { 

    static final String ORIENTATION = "orientation"; 

    static SharedPreferences getSharedPreferences(Context ctx) { 
     return PreferenceManager.getDefaultSharedPreferences(ctx); 
    } 

    // value will be between 0 and 1 
    public static void setOrientation(Context ctx, int value) { 
     SharedPreferences.Editor editor = getSharedPreferences(ctx).edit(); 
     editor.putInt(ORIENTATION, value); 
     editor.commit(); 
    } 

    public static String getOrientation(Context ctx) { 
     return getSharedPreferences(ctx).getString(ORIENTATION, ""); 
    } 

} 

И тогда в вашем MainActivity:

int portrait = 0; 
int landscape = 1; 
. 
. 
. 
// in your onCreate : 
Configuration newConfig = getResources().getConfiguration(); 
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     SaveOrientation.setOrientation(this,portrait); 
}else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     SaveOrientation.setOrientation(this,landscape); 
} 
applyOrientation(); 
. 
. 
. 
// method applyOrientation 
private void applyOrientation(){ 
    int orientation = SaveOrientation.getOrientation(this); 

    if(orientation == portrait){ 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    }else if (orientation == landscape){ 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
1

Вы можете реализовать его с помощью класса ActivityInfo.

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Проверить ActivityInfo here

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait); 
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape); 

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

}); 

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 

}); 

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html

В случае, если кто хотел бы получить осмысленное описание ориентации (например, переданные в onConfigurationChanged (..) с этим reverseLandscape, sensorLandscape и т.д.), просто используйте getRequestedOrientation()

+0

Спасибо за упоминание ActivityInfo знало о технике его подводит, но я пошел с Davids подходом. И для объяснения + пример действительно полезен – MePo