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 ... 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.
--Layout utilise ConstraintLayout
pour conserver le rapport hauteur / largeur du dessin --Spécifiez ʻapp: layout_constraintVertical_chainStyle = "emballé"
pour attacher les boutonsActivity
à Activity dans le manifeste. Permet la détection de la rotation verticale et horizontale. --Lorsque l'orientation verticale et horizontale change, ʻonConfigurationChanged
est appelé. En cela, la mise en page d'ImageView a été mise à jour.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);
}
}
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