- <activity
- android:name=".MainActivity"
- android:configChanges="orientation|screenSize|screenLayout|keyboardHidden">
- ...
- </activity>
例としてここでは縦画面では上部に 16:9 で配置し、横画面では全画面に配置している。
縦画面用
res/layout/activity_main_port.xml
- <?xml version="1.0" encoding="utf-8"?>
- <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/constraintLayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <include
- android:id="@+id/container"
- layout="@layout/activity_main"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintDimensionRatio="16:9"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- </androidx.constraintlayout.widget.ConstraintLayout>
res/layout/activity_main_land.xml
- <?xml version="1.0" encoding="utf-8"?>
- <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/constraintLayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <include
- android:id="@+id/container"
- layout="@layout/activity_main"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- </androidx.constraintlayout.widget.ConstraintLayout>
onConfigurationChanged() で画面の向きに応じて対応する ConstraintSet を ConstraintLayout に applyTo() する。
- class MainActivity : AppCompatActivity() {
- private val constraintSetPort = ConstraintSet()
- private val constraintSetLand = ConstraintSet()
- private lateinit var constraintLayout: ConstraintLayout
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val layoutId = when (resources.configuration.orientation) {
- Configuration.ORIENTATION_LANDSCAPE -> R.layout.activity_main_land
- else -> R.layout.activity_main_port
- }
- setContentView(layoutId)
- constraintLayout = findViewById(R.id.constraintLayout)
- constraintSetPort.clone(this, R.layout.activity_main_port)
- constraintSetLand.clone(this, R.layout.activity_main_land)
- }
- override fun onConfigurationChanged(newConfig: Configuration) {
- super.onConfigurationChanged(newConfig)
- val constraintSet = when (newConfig.orientation) {
- Configuration.ORIENTATION_LANDSCAPE -> constraintSetLand
- else -> constraintSetPort
- }
- constraintSet.applyTo(constraintLayout)
- }
- }
0 件のコメント:
コメントを投稿