[JAVA] Changer la disposition lors de la rotation avec onConfigurationChanged

Ce que je voulais faire

Je voulais afficher l'image ImageView en plein écran (le rapport hauteur / largeur reste le même) et placer le bouton directement en dessous, mais ... 図1.png Si vous le faites pivoter horizontalement, le bouton sera masqué, et si vous modifiez la disposition en fonction de l'écran horizontal, la position du bouton changera lorsque vous le pivoterez verticalement. Je voulais n'avoir qu'un seul xml pour la mise en page, j'ai donc décidé de redimensionner dynamiquement l'ImageView dans la source.

Ce que j'ai fait

Disposition

--Layout utilise ConstraintLayout

Activity

La source

activity_main.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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:padding="8dp"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintVertical_chainStyle="packed"
        app:srcCompat="@drawable/ic_launcher_background" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java


public class MainActivity extends AppCompatActivity {
    ImageView imageView;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Acquisition de l'interface utilisateur
        imageView = findViewById(R.id.imageView);
        button = findViewById(R.id.button);
        //Pour le moment, obtenez l'orientation au démarrage
        int orientation = getResources().getConfiguration().orientation;
        UpdateLayout(orientation); //Mise à jour de la mise en page
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int orientation = newConfig.orientation; //Obtenez une orientation
        UpdateLayout(orientation); //Mise à jour de la mise en page
    }

    /**
     *Mise à jour de la mise en page
     * @orientation d'orientation des paramètres
     */
    protected void UpdateLayout(int orientation){
        //Acquisition ImageView LayoutParam
        LayoutParams param = imageView.getLayoutParams();
        if (orientation == Configuration.ORIENTATION_PORTRAIT) {
            //En orientation portrait
            Log.d("UpdateLayout", "Orientation verticale");
            param.height = LayoutParams.WRAP_CONTENT;
            param.width = 0;
        }
        else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //Face à face
            Log.d("UpdateLayout", "De côté");
            param.height = 0;
            param.width = LayoutParams.WRAP_CONTENT;
        }
        imageView.setLayoutParams(param);
    }
}

Article de référence

Déterminez le paysage ou le portrait sur Android Afficher la largeur totale de l'écran sur Android tout en conservant le rapport hauteur / largeur de l'image https://techblog.zozo.com/entry/constraint_layout

Recommended Posts

Changer la disposition lors de la rotation avec onConfigurationChanged
Changer de port avec SpringBoot
[Rails] Lorsque le changement de disposition du dispositif n'est pas reflété
Essayez de résumer la disposition commune avec des rails
Comment changer l'action avec plusieurs boutons d'envoi
Changez l'écran d'affichage lorsque vous passez la souris sur un onglet avec jQuery
Changer de siège avec Java
[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
[Mémorandum du débutant] Histoire lors de la rotation de TextView et Button avec du texte
Spécifiez le code de caractère de la source lors de la construction avec Maven
Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails)
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Si cela ne change pas avec l'option disable_with dans Safari