Mi diseño principal main.xml simplemente contiene dos LinearLayouts:
- La primera
LinearLayout
alberga aVideoView
y aButton
, - El segundo
LinearLayout
aloja unEditText
, y estoLinearLayout
ha establecido el valor de visibilidad en " GONE " (android:visibility="gone"
)
como abajo:
<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>
He implementado con éxito la característica de que cuando el Button
(con my_btn id) es presionado, el segundo LinearLayout
con EditText
se muestra el campo, con el siguiente código de Java:
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);
}
});
Con el código Java anterior, el segundo LinearLayout
con EditText
se muestra como anexando debajo del primero, lo LinearLayout
que tiene sentido.
PERO , Lo que necesito es: cuando Button
se pulse (id my_btn), la segunda LinearLayout
con la EditText
que se muestra en la parte superior de la primera LinearLayout
, que se parece a la segunda LinearLayout
con la EditText
que se levanta de la parte inferior de la pantalla, y el segundo LinearLayout
conEditText
sólo ocupan parte de la pantalla desde abajo, ese es el primer LinearLayout aún visible, como se muestra en la imagen de abajo:
Así que, cuando Button
se pulsa: (id my_btn) para mostrar la forma en la segunda LinearLayout
con EditText
en la parte superior de la primera LinearLayout
en lugar de añadir segundo LinearLayout
continuación primero LinearLayout
mediante programación?
TextView
arriba? ¿Es porque ocupa el segundo lugar en la lista?FrameLayout
no es la mejor manera de hacer esto:Úselo en su
RelativeLayout
lugar. Puede colocar los elementos en cualquier lugar que desee. El elemento que viene después, tiene el índice z más alto que el anterior (es decir, supera al anterior).Ejemplo:
<?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>
fuente
La respuesta, dada por Alexandru, funciona bastante bien. Como dijo, es importante que esta vista de "acceso" se agregue como último elemento. Aquí hay un código que me sirvió:
... ... </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) {
fuente