Как сохранить ориентацию экрана в портретном режиме с Android 5.0?

Мне нужно держать экран в портретном режиме. Для этого я использую эту строку в файле манифеста

android:screenOrientation="portrait"

Здесь мой файл

<activity
        android_name=".activities.Splash"
        android_label="@string/app_name"
        android_screenOrientation="portrait">
        <intent-filter>
            <action android_name="android.intent.action.MAIN" />

            <category android_name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Я использую Samsung S5, и он все еще может вращаться в ландшафте…

Accorging документация с Android 5.0 мы получаем широкие возможности настройки

android:screenOrientation=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]

Я пробовал некоторые из них, но они все еще вращаются…

Что я делаю не так?

Весь файл манифеста

<?xml version="1.0" encoding="utf-8"?>
<manifest 
package="com.example.android.camera2basic"
android_versionCode="1"
android_versionName="1.0">

<uses-permission android_name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android_name="android.permission.READ_PHONE_STATE" />
<uses-permission android_name="android.permission.CAMERA" />
<uses-permission android_name="android.permission.INTERNET" />

<!-- GCM requires a Google account. -->
<uses-permission android_name="android.permission.GET_ACCOUNTS" />

<!-- For Google+ LogIn -->
<uses-permission android_name="android.permission.USE_CREDENTIALS" />

<!-- Для регистрации приложения в GCM всякий раз, когда телефон перезагружается. -->
<uses-permission android_name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android_name="android.permission.WAKE_LOCK" />

<!-- This app has permission to register and receive data message. -->
<uses-permission android_name="com.google.android..RECEIVE" />

<uses-feature android_name="android.hardware.camera" />
<uses-feature android_name="android.hardware.camera.autofocus" />

<permission
    android_name="com.example.android.C2D_MESSAGE"
    android_protectionLevel="signature" />

<uses-permission android_name="com.example.android" />

<application
    android_name=".authorization.MyFacebook"
    android_allowBackup="true"
    android_icon="@drawable/title"
    android_label="@string/app_name"
    android_theme="@style/MaterialTheme">
    <meta-data
        android_name="com.facebook.sdk.ApplicationId"
        android_value="@string/app_id" />

    <activity
        android_name=".activities.Splash"
        android_label="@string/app_name"
        android_screenOrientation="locked">
        <intent-filter>
            <action android_name="android.intent.action.MAIN" />

            <category android_name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <meta-data
        android_name="com.google.android.gms.version"
        android_value="@integer/google_play_services_version" />

    <receiver
        android_name=".gcm.GcmBroadcastReceiver"
        android_permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android_name="com.google.android.c2dm.intent.RECEIVE" />
            <action android_name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android_name="com.example.android" />
        </intent-filter>
    </receiver>

    <service android_name=".gcm.GcmIntentService" />

    <activity
        android_name=".activities.AcceptNotAccept"
        android_theme="@style/AppTheme.CustomStyle" />
    <activity
        android_name=".activities.PopUpActivity"
        android_theme="@style/AppTheme.CustomStyle" />
    <activity android_name=".tools.TestDeleteIt" />
    <activity android_name=".activities.Welcome2" />
    <activity android_name=".activities.WebActivity" />
    <activity android_name=".authorization.AuthorizationActivity" />
    <activity android_name=".activities.WebViewAcceptReject" />
    <activity android_name=".activities.CameraActivity" />
    <activity android_name=".authorization.LogIn" />
    <activity android_name=".authorization.RegistrationActivity" />
    <activity android_name=".activities.ForgotYourPassword" />
    <activity android_name=".activities.MainActivity" />
    <activity android_name=".activities.VideoActivity"/>
    <activity
        android_name="com.facebook.FacebookActivity"
        android_configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android_label="@string/app_name"
        android_theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>

</manifest>

Java-код для splash

public class Splash extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

//      Hide the status bar.
    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);

    TextView tvSplash = (TextView) findViewById(R.id.tvSplash);
    tvSplash.setVisibility(View.INVISIBLE);
    UtilClass.setFont(getApplicationContext(), tvSplash);

    Thread logoTimer = new Thread() {
        public void run() {
            try {

                ImageView imageView = (ImageView) findViewById(R.id.ivSplash);
                Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);
                imageView.startAnimation(animation);

                int logoTimer = 0;
                while (logoTimer < 2500) {
                    sleep(100);
                    logoTimer = logoTimer + 100;
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        TextView textView = (TextView) findViewById(R.id.tvSplash);
                        Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
                        textView.startAnimation(animation);

                    }
                });

                logoTimer = 0;

                while (logoTimer < 2500) {
                    sleep(100);
                    logoTimer = logoTimer + 100;
                }

                if (UtilClass.checkLogIn(getApplicationContext())) {
                    startActivity(new Intent(getApplicationContext(), MainActivity.class)
                            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                                    Intent.FLAG_ACTIVITY_CLEAR_TASK));
                } else {
                    startActivity(new Intent(getApplicationContext(), AuthorizationActivity.class)
                            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                                    Intent.FLAG_ACTIVITY_CLEAR_TASK));
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    logoTimer.start();
}
}

4 ответа

  1. Вы можете добавить android:configChanges="orientation|keyboardHidden"?

    <activity
        android_name=".activities.Splash"
        android_label="@string/app_name"
        android_screenOrientation="portrait"
        android_configChanges="orientation|keyboardHidden">
    
  2. В файле манифеста после основного действия вставьте следующую строку.

    android:screenOrientation="portrait"
    

    Или в вашем коде после setContentView() вставьте под строкой.

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    
  3. В файле манифеста после основного действия вставьте следующую строку.

    android:screenOrientation="portrait"
    

    java через setContentView () вставить ниже строки.

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    см. документацию.