setRequestedOrientation позволяет вращение в течение 1 секунды - PullRequest
2 голосов
/ 04 июня 2019

В настоящее время я работаю над приложением Android, в котором я хотел бы:

  • отключить поворот на смартфоне;
  • включить вращение на планшете.

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

Это работает. Но у меня есть дело, которое я не могу охватить:

  1. Запускаю приложение на MainActivity в портретной ориентации на смартфоне
  2. Я поворачиваю смартфон в альбомной ориентации (активность не вращается)
  3. Я нажимаю на кнопку, чтобы запустить SecondActivity
  4. новое действие запускается в ландшафте, а затем поворачивается в портрет

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

Вот код из очень простого примера:

MainActivity:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

        button?.setOnClickListener {
            startActivity(Intent(this, SecondActivity::class.java))
        }
    }
}

SecondActivity:

class SecondActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    }
}

Манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.myapplication">

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity
                android:name=".MainActivity"
                android:configChanges="orientation|keyboardHidden|screenSize"
        >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

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

        <activity
                android:name=".SecondActivity"
                android:configChanges="orientation|keyboardHidden|screenSize"
        />
    </application>

</manifest>

Заранее благодарю за помощь.

1 Ответ

2 голосов
/ 04 июня 2019
Yes set the orientation before setContentView

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setContentView(R.layout.activity_second)
...