如何在我的情况下以编程方式显示一个布局?

我的主要布局main.xml只包含两个LinearLayouts:

  • 第一个LinearLayout包含一个VideoView和一个Button
  • 第二个LinearLayout拥有一个EditText ,这个LinearLayout已经将可见性值设置为“ GONE ”( android:visibility="gone"

如下所示:

 <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> 

我成功实现了这个function,当Button (带有id my_btn)被按下时,带有EditText字段的第二个 LinearLayout被显示,并带有以下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); } }); 

使用上面的Java代码,带有EditText第二个 LinearLayout显示为在第一个 LinearLayout 下面附加 ,这是有道理的。

但是 ,我需要的是:当Button (id:my_btn)被按下时,带有EditText第二个 LinearLayout 显示在 第一个 LinearLayout 顶部 ,看起来像EditText第二个 LinearLayout从屏幕底部上升, 第二个带有EditText LinearLayout只占用底部的部分屏幕,这是第一个LinearLayout仍然可见,如下图所示:

在这里输入图像描述

所以,当Button (id:my_btn)被按下的时候,如何在第一个 LinearLayoutEditText显示第二个 LinearLayout ,而不是以编程方式在第一个 LinearLayout下面附加第二个 LinearLayout

与两个孩子一起使用FrameLayout。 这两个孩子将会重叠。 这是在Android的教程之一,其实是一个build议,这不是一个黑客…

以下是一个TextView显示在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> 

结果如下

Alexandru给出的答案工作得很好。 正如他所说,重要的是这个“访问者”视图被添加为最后一个元素。 这里有一些代码对我有用:

  ... ... </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> 

在Java中:

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