2015-11-03 2 views
0

У меня есть один сервис, при запуске один вид появляется поверх всех видов.Android: Как установить ориентацию для просмотра

Если я поворачиваю свой мобильный на пейзаж, ориентация вида меняется на пейзаж, но я хочу сделать только портрет. Как я могу это сделать?

+0

Добавить 'android: screenOrientation =" portrait "' в файле манифеста под действием, в котором у вас есть вид. ' –

+0

Это не деятельность .. мой взгляд открыт, когда громкость вниз кнопка нажмите .. –

+1

Но ваше мнение должно быть внутри чего-то? Покажите нам свой код. –

ответ

0

Попробуйте установить ориентацию программно, когда вид открыт.

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

+0

Это не активность .. –

+0

Да, но вы показали это представление в контексте любой активности. –

+0

Да .. и для этой активности я уже установил ориентацию экрана в манифесте, а также в Oncreate() –

0

В вашем файле манифеста убедитесь, чтобы установить правильную ориентацию, как это:

<activity android:name=".SomeActivity" 
android:label="@string/app_name" 
android:screenOrientation="portrait" /> 

Таким образом Портретный режим принудительно, и ваше приложение не изменится на альбомную при повороте устройства.

+0

Это не активность .. –

+0

Итак, что вы хотите сделать? Пусть все приложение изменит ориентацию, но исправьте этот единственный взгляд на портрет? – LilaQ

2
@Override 
public void onCreate(Bundle savedInstanceState) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

или

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+0

, который не является активным. –

+0

Добавьте его в свою деятельность, он будет работать @Sangha_development – dnkilic

+0

не работает, я уже сделал это –

1

Чтобы объявить, что ваша деятельность обрабатывает изменения конфигурации, отредактируйте соответствующий <activity> элемент в вашем файле манифеста, чтобы включить атрибут android:configChanges со значением, которое представляет собой конфигурацию, которую вы хотите обработать ,

Например, следующий манифест код объявляет деятельность, которая обрабатывает как изменение ориентации экрана и изменение доступности клавиатуры:

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

Теперь, когда одна из этих конфигураций меняются, MyActivity не запускается. Вместо этого MyActivity получает вызов onConfigurationChanged(). Этот метод передается объекту Configuration, который определяет новую конфигурацию устройства. Читая поля в Конфигурации, вы можете определить новую конфигурацию и внести соответствующие изменения, обновив ресурсы, используемые в вашем интерфейсе.

Например, следующая реализация onConfigurationChanged() проверяет текущую ориентацию устройства:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

или просто

screenOrientation является атрибутом элемента деятельности. Ориентацией активности андроида может быть портрет, пейзаж, датчик, неопределенный и т. Д. Вы должны определить его в файле AndroidManifest.xml. Например:

<activity 
      android:name="com.example.screenorientation.MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" 
      > 

Но согласно моему опыту, вам нужно установить Для ориентации Android 3.2 и выше, вы должны ОБА

android:configChanges="orientation|screenSize" 

Ссылка: http://developer.android.com/guide/topics/resources/runtime-changes.html

EDIT:

ориентации Android экран Lifecycle

Мы могли бы иметь некоторую путаницу на ориентацию андроид экрана изменить жизненный цикл активности Android. Иногда вы можете заметить, что ваша активность возобновляется, а вы поворачиваете устройство. Иногда ничего не происходит. Ниже приведено простое правило для жизненного цикла изменения ориентации экрана Android.

. Если у вас уже есть @Override функция в вашем java-коде (в вашем классе активности Android) для управления Android-ориентацией экрана Android. Тогда ваша активность никогда не будет перезагружена для каких-либо изменений ориентации экрана.

. Если вы не выполняете функцию @Override onConfigurationChanged(), как указано выше, ваша работа будет возобновлена ​​каждый раз, когда любое изменение ориентации экрана произойдет на вашем устройстве. Это означает, что ваша активность сначала уничтожит, вызвав API onDestroy(), а затем метод onCreate() снова вызовет вашу текущую активность для ее перезапуска.

. Чтобы правильно обрабатывать состояние перезапуска вашей активности, вам необходимо восстановить прежнее состояние с помощью обычного жизненного цикла Activity, в котором ОС Android вызывает метод onSaveInstanceState(), прежде чем он уничтожит вашу активность. Чтобы вы могли сохранять свои данные (значения переменных) и состояние вашего приложения. Затем вы можете восстановить предыдущее состояние во время вызова onCreate() или onRestoreInstanceState() вашего действия.

Надеюсь, это поможет вам.

+0

, который не является активным .. пожалуйста, внимательно прочитайте вопрос .. –

+0

@ Sangha_development: Итак, какой у вас взгляд? – KishuDroid

0

Ниже приведен пример, который дает лучшее представление о достижении вашей задачи.

public class MainScreenOrientation extends Activity { 

    private static final String TAG = "MainScreenOrientation"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mContext = this; 

     setContentView(R.layout.main_activity); 

     startService(new Intent(this, MyOwnService.class)); 
    } 
} 

В моей MyOwnService службы класса

public class MyOwnService extends Service { 
    private static final String TAG = "MyOwnService"; 
    private static Context mContext; 
    private static final String BCAST_CONFIGCHANGED = "android.intent.action.CONFIGURATION_CHANGED"; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     mContext = this; 

     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(BCAST_CONFIGCHANGED); 
     this.registerReceiver(mBroadcastReceiver, intentFilter); 
    } 

    @Override 
    public void onDestroy() {   
     Log.d(TAG, "onDestroy()"); 
     //Unregister receiver to avoid memory leaks 
     mContext.unregisterReceiver(mBroadcastReceiver); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 

    } 

    public BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent myIntent) { 

      if (myIntent.getAction().equals(BCAST_CONFIGCHANGED)) { 

       Log.d(TAG, "received->" + BCAST_CONFIGCHANGED); 


       if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ 
        // it's Landscape 
        Log.d(TAG, "LANDSCAPE"); 
       } 
       else { 
        Log.d(TAG, "PORTRAIT"); 
       } 
      } 
     } 
    }; 
} 

И наконец, в файле манифеста

<service android:enabled="true" android:name="com.android.example.services.MyOwnService"> 
      <intent-filter> 
       <action android:name="android.intent.action.CONFIGURATION_CHANGED"/> 
      </intent-filter> 
</service> 

Надеется, что это помогает.

0

Если я правильно понял, вы хотите, чтобы ваш вид был зафиксирован в портретном режиме, но остальная часть вашего приложения свободно вращалась всякий раз, когда вы вращаете свое устройство.

В этом случае вам нужно будет уловить изменения ориентации, а затем поверните View Viewwise против текущего вращения.

Что-то вроде этого:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    View yourView = ....; 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
    { 
     yourView.setRotation(-90); 
    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    { 
     yourView.setRotation(90); 
    } 
} 

Вы также должны отредактировать соответствующий элемент в вашем файле манифеста.

 <activity android:name=".MyActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="@string/app_name"> 

Я не уверен в значениях степени и не могу проверить это прямо сейчас, возможно, вам придется протестировать это.

Тем не менее, таким образом вы можете сохранить свой просмотр всегда в режиме Портрет.

 Смежные вопросы

  • Нет связанных вопросов^_^