Android 无法隐藏FrameLayout

Android 无法隐藏FrameLayout,android,android-framelayout,Android,Android Framelayout,我正在开发Android即时聊天应用程序。在聊天活动中,我使用的是框架布局。以下是xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FCAB26" android:orientation="ver

我正在开发Android即时聊天应用程序。在聊天活动中,我使用的是框架布局。以下是xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FCAB26"
android:orientation="vertical"
android:weightSum="1">

<ListView
    android:id="@+id/list_view_messages"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight=".60"
    android:background="@null"
    android:divider="@null"
    android:stackFromBottom="true"
    android:transcriptMode="alwaysScroll"></ListView>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_weight=".10"
    android:orientation="horizontal"
    android:weightSum="1">

    <ImageView
        android:id="@+id/imgSmile"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".10"
        android:src="@drawable/ic_msg_panel_smiles"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="-10sp"/>

    <com.rockerhieu.emojicon.EmojiconEditText
        android:id="@+id/edtMessage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:hint="Enter Message"
        android:layout_weight=".60"></com.rockerhieu.emojicon.EmojiconEditText>

    <Button
        android:id="@+id/btnSendMessage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_weight=".30"
        android:gravity="center"
        android:onClick="onClick"
        android:text="Send Message" />
</LinearLayout>

<FrameLayout
    android:id="@+id/emojicons"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight=".30"
    android:visibility="gone" />
它工作正常。因此,我的问题是如何在创建活动时将框架设置为不可见。它应该显示在图像视图中的clickinh上。软键盘的高度和布局应该相同。屏幕截图如下所示:

1.屏幕截图

2。单击图像视图

3。单击编辑文本


请帮助我解决此问题。

使用
View.GONE
而不是
View.INVISIBLE

// Hiding the FrameLayout containing the list of Emoticons
public void hideEmojiPopUp(boolean hideEmoji) {
   FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
   frameLayout.setVisibility(View.GONE);
}
查看。不可见

此视图不可见,但仍会占用布局空间 目的

查看。已消失

此视图是不可见的,并且不占用任何布局空间 目的


这是因为您正在使用权重。 删除权重总和和布局权重,并使用换行内容

<FrameLayout
    android:id="@+id/emojicons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />
而不是

public void hideEmojiPopUp(boolean hideEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.INVISIBLE);
}
用这个

public void hideEmojiPopUp(boolean hideEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.GONE);
}

你用的是隐形而不是消失。“不可见”仅隐藏视图而不留下空间,如果消失,也会删除空白空间。因此,请使用Goe here。

我认为在这种情况下,您不应该在这种情况下使用重量。试着给它一个固定的高度,
setVisibility(View.GONE)
单击图像视图,一切都正常。但问题是当第一次创建聊天活动时,FrameLayout正在占用一些空间。您可以在xml文件中看到,我已将可见性设置为已消失。我不希望FrameLayout在此处占用一些空间。我在设计聊天活动的屏幕时遇到问题。正如您所看到的,我想要一个列表视图,一个线性布局(包含imageview、edittext、Send message按钮)设计中的框架布局。我使用线性布局来解决我的目的。但它对我不起作用。我之前使用了重量。因此,即使在将可视性设置为“消失”后,框架布局仍占据了一些空间。当我从线性布局中移除重量并指定固定高度时,但这对我来说仍然不起作用。首先,你需要将线性布局作为一个主父级,宽度、高度和方向为“匹配父级”。在该线性布局内,获取一个宽度匹配且高度为0dp的列表视图。并给出权重1。现在再做一个线性布局,使用此设计布局进行图像,编辑文本和发送按钮。在此处关闭此线性布局,最后为imozy创建您的视图。谢谢Aakash。它对我有效。您能告诉我如何控制软键盘的高度吗?实际上,在我的情况下,软键盘和表情键盘的高度不同。我想使其相等。
public void hideEmojiPopUp(boolean hideEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.INVISIBLE);
}
public void hideEmojiPopUp(boolean hideEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.GONE);
}