如何在我的情况下以编程方式显示一个布局?
我的主要布局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)被按下的时候,如何在第一个 LinearLayout
用EditText
显示第二个 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) {