86 votes

Comment faire pour afficher une présentation sur le dessus de l'autre par programmation dans mon cas?

Ma page principale main.xml ne contient que deux LinearLayouts:

  • Le 1er LinearLayout accueille une VideoView et Button,
  • La 2e LinearLayout accueille un EditText, et ce LinearLayout a définir la visibilité de la valeur à "DISPARU" (android:visibility="gone")

comme ci-dessous:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
        android:orientation="vertical"
>
    <LinearLayout 
        android:id="@+id/first_ll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"

    >
        <VideoView 
            android:id="@+id/my_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="9"
        />

        <Button
            android:id="@+id/my_btn"
            android:layout_width="30dip" 
            android:layout_height="30dip"
            android:layout_gravity="right|bottom"
                android:layout_weight="1"
        />

    </LinearLayout>

    <LinearLayout 
        android:id="@+id/second_ll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"

        android:visibility="gone"
    >
        <EditText 
            android:id="@+id/edit_text_field"
            android:layout_height="40dip"
            android:layout_width="fill_parent"
            android:layout_weight="5"
            android:layout_gravity="center_vertical"
        />

    </LinearLayout>
</LinearLayout>

J'ai mis en œuvre avec succès la fonction que lorsque l' Button (avec l'id my_btn) est enfoncée, le 2e LinearLayout avec EditText champ 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 la ci-dessus du code Java, le 2e LinearLayout avec EditText est indiqué comme ci-dessous en ajoutant le 1er LinearLayout qui a du sens.

MAIS, Ce dont j'ai besoin est: quand Button(id: my_btn) est enfoncée, le 2e LinearLayout avec EditText est indiquée sur le dessus de la 1re LinearLayout, qui ressemble à la 2e LinearLayout avec EditText est à la hausse à partir du bas de l'écran, et le 2e LinearLayout avec EditText seulement occupent une partie de l'écran à partir du bas, c'est le 1er LinearLayout encore visibles, comme l'image ci-dessous ont montré:

enter image description here

Ainsi, lors de l' Button(id: my_btn) est appuyé sur la façon de montrer la 2e LinearLayout avec EditText sur le haut de la 1re LinearLayout au lieu de ajoutant 2e LinearLayout - dessous 1re LinearLayout par programmation?

189voto

Alexandru Cristescu Points 1719

Utiliser un FrameLayout avec deux enfants. Les deux enfants vont se chevaucher. Ce qui est recommandé dans un des tutos de Android en fait, ce n'est pas un hack...

Voici un exemple où un TextView est affichée en haut de l'ImageView:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 

    android:scaleType="center"
    android:src="@drawable/golden_gate" />

  <TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"

    android:padding="12dip"

    android:background="#AA000000"
    android:textColor="#ffffffff"

    android:text="Golden Gate" />

</FrameLayout>

Here is the result

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X