Ma mise en page principale main.xml contient simplement deux LinearLayouts:
- Le 1er
LinearLayout
héberge unVideoView
et unButton
, - Le 2ème
LinearLayout
héberge unEditText
, et celaLinearLayout
a défini la valeur de visibilité sur " GONE " (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 implémenté avec succès la fonctionnalité selon laquelle lorsque le Button
(avec id my_btn) est enfoncé, le 2ème champ 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 2ème LinearLayout
avec EditText
est affiché comme l' ajout en dessous du 1er LinearLayout
ce qui a du sens.
MAIS , Ce que j'ai besoin est: quand Button
(id: my_btn) est pressée, le 2ème LinearLayout
avec EditText
est montré au - dessus de la 1ère LinearLayout
, qui ressemble à la 2ème LinearLayout
avec EditText
est en hausse à partir du bas de l' écran, et la 2ème LinearLayout
avec EditText
occupent seulement une partie de la écran à partir du bas, c'est le 1er LinearLayout encore visible, comme l'image ci-dessous l'a montré:
Alors, quand Button
(id: my_btn) est pressé comment afficher la 2ème LinearLayout
avec EditText
au - dessus de la 1ère LinearLayout
place du annexant 2 LinearLayout
ci - dessous le 1er LinearLayout
programme?
TextView
le dessus? est-ce parce qu'il arrive deuxième dans la liste?La réponse, donnée par Alexandru fonctionne plutôt bien. Comme il l'a dit, il est important que cette vue "accesseur" soit ajoutée comme dernier élément. Voici un code qui a fait l'affaire pour moi:
... ... </LinearLayout> </LinearLayout> </FrameLayout> </LinearLayout> <!-- place a FrameLayout (match_parent) as the last child --> <FrameLayout android:id="@+id/icon_frame_container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </TabHost>
en Java:
final MaterialDialog materialDialog = (MaterialDialog) dialogInterface; FrameLayout frameLayout = (FrameLayout) materialDialog .findViewById(R.id.icon_frame_container); frameLayout.setOnTouchListener( new OnSwipeTouchListener(ShowCardActivity.this) {
la source
FrameLayout
n'est pas la meilleure façon de procéder:Utilisez
RelativeLayout
plutôt. Vous pouvez positionner les éléments où vous le souhaitez. L'élément qui vient après, a le z-index plus élevé que le précédent (c'est-à-dire qu'il vient sur le précédent).Exemple:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" app:srcCompat="@drawable/ic_information"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a text." android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_margin="8dp" android:padding="5dp" android:textAppearance="?android:attr/textAppearanceLarge" android:background="#A000" android:textColor="@android:color/white"/> </RelativeLayout>
la source