Comment afficher une disposition par-dessus l’autre par programmation dans mon cas?

Mon layout principal main.xml contient simplement deux LinearLayouts:

  • Le premier LinearLayout héberge un VideoView et un Button ,
  • Le 2nd LinearLayout héberge un EditText , et ce LinearLayout a défini la valeur de visibilité sur ” GONE ” ( android:visibility="gone" )

comme ci-dessous:

    

J’ai implémenté avec succès la fonctionnalité que lorsque le Button (avec l’id my_btn) est pressé, le 2ème LinearLayout avec EditText est affiché, avec le code Java suivant:

 LinearLayout secondLL = (LinearLayout) findViewById(R.id.second_ll); Button myBtn = (Button) findViewById(R.id.my_btn); myBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ int visibility = secondLL.getVisibility(); if(visibility==View.GONE) secondLL.setVisibility(View.VISIBLE); } }); 

Avec le code Java ci-dessus, le 2nd LinearLayout avec EditText est affiché comme un ajout sous le 1er LinearLayout ce qui est logique.

MAIS , ce dont j’ai besoin, c’est: lorsque l’on appuie sur Button (id: my_btn), le 2ème LinearLayout avec EditText est affiché en haut du 1er LinearLayout , ce qui donne l’impression que le 2ème LinearLayout avec EditText est en bas de l’écran et le 2ème LinearLayout avec EditText n’occupe qu’une partie de l’écran depuis le bas, c’est le 1er LinearLayout encore visible, comme le montre l’image ci-dessous:

entrer la description de l'image ici

Donc, quand Button (id: my_btn) est pressé, comment afficher le 2ème LinearLayout avec EditText au-dessus du 1er LinearLayout au lieu d’append le 2ème LinearLayout sous 1st LinearLayout programmation?

Utilisez un FrameLayout avec deux enfants. Les deux enfants vont se chevaucher. Ceci est recommandé dans l’un des tutoriels d’Android en fait, ce n’est pas un hack …

Voici un exemple où un TextView est affiché sur un ImageView:

     

Voici le résultat

La réponse donnée par Alexandru fonctionne très bien. Comme il l’a dit, il est important que cette vue “accesseur” soit ajoutée en tant que dernier élément. Voici un code qui a fait l’affaire:

  ... ...         

en Java:

 final MaterialDialog materialDialog = (MaterialDialog) dialogInterface; FrameLayout frameLayout = (FrameLayout) materialDialog .findViewById(R.id.icon_frame_container); frameLayout.setOnTouchListener( new OnSwipeTouchListener(ShowCardActivity.this) { 

FrameLayout n’est pas le meilleur moyen de le faire:

Utilisez plutôt RelativeLayout . Vous pouvez positionner les éléments où vous voulez. L’élément suivant a le z-index le plus élevé par rapport au précédent (c’est-à-dire qu’il remplace le précédent).

Exemple:

 < ?xml version="1.0" encoding="utf-8"?>     

entrer la description de l'image ici