[JAVA] Ändern Sie das Layout beim Drehen mit onConfigurationChanged

Was ich machen wollte

Ich wollte das ImageView-Bild im Vollbildmodus anzeigen (das Seitenverhältnis bleibt gleich) und die Schaltfläche direkt darunter platzieren, aber ... 図1.png Wenn Sie es horizontal drehen, wird die Schaltfläche ausgeblendet. Wenn Sie das Layout entsprechend dem horizontalen Bildschirm ändern, verschiebt sich die Position der Schaltfläche, wenn Sie sie vertikal drehen. Ich wollte nur eine XML für das Layout haben, deshalb habe ich beschlossen, die Größe der ImageView in der Quelle dynamisch zu ändern.

Was ich getan habe

Layout

--Layout verwendet ConstraintLayout --ImageView-Einstellungen:

Activity

Quelle

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);
        //UI-Erfassung
        imageView = findViewById(R.id.imageView);
        button = findViewById(R.id.button);
        //Holen Sie sich vorerst die Orientierung beim Start
        int orientation = getResources().getConfiguration().orientation;
        UpdateLayout(orientation); //Layout-Update
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int orientation = newConfig.orientation; //Orientierung bekommen
        UpdateLayout(orientation); //Layout-Update
    }

    /**
     *Layout-Update
     * @param Orientierung Orientierung
     */
    protected void UpdateLayout(int orientation){
        //ImageView LayoutParam-Erfassung
        LayoutParams param = imageView.getLayoutParams();
        if (orientation == Configuration.ORIENTATION_PORTRAIT) {
            //Im Hochformat
            Log.d("UpdateLayout", "Vertikale Ausrichtung");
            param.height = LayoutParams.WRAP_CONTENT;
            param.width = 0;
        }
        else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //Bei seitlicher Ausrichtung
            Log.d("UpdateLayout", "Seitwärts");
            param.height = 0;
            param.width = LayoutParams.WRAP_CONTENT;
        }
        imageView.setLayoutParams(param);
    }
}

Referenzartikel

Quer- oder Hochformat auf Android bestimmen Zeigen Sie die volle Bildschirmbreite unter Android an, während Sie das Seitenverhältnis des Bildes beibehalten https://techblog.zozo.com/entry/constraint_layout

Recommended Posts

Ändern Sie das Layout beim Drehen mit onConfigurationChanged
Ändern Sie den Port mit SpringBoot
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
So ändern Sie die Aktion mit mehreren Senden-Schaltflächen
Wechseln Sie den Bildschirm, wenn Sie mit jQuery über eine Registerkarte fahren
Wechseln Sie die Plätze mit Java
[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
[Memorandum für Anfänger] Story beim Drehen von TextView und Button mit Text
Geben Sie beim Erstellen mit Maven den Zeichencode der Quelle an
Ändern Sie den Einstellungswert für jede Umgebung mit Digdag (RubyOnRails).
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Wenn sich dies mit der Option disable_with in Safari nicht ändert