无法隐藏 FrameLayout

Unable to hide FrameLayout

我正在开发 Android 即时聊天 Application.In 聊天 Activity,我正在使用 FrameLayout。以下是 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" />

我已将框架的可见性设置为消失但它仍然占据该区域。我希望 FrameLayout 在开始时不要占据 space。ImageView、EditText 和发送消息按钮应该在底部在 screen.On 单击 ImageView 时,会显示表情符号面板并隐藏软键盘,我为此使用了以下代码:

 imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            hideKeyboard();  // hiding the keyboard
            showEmojiPopUp(!showEmoji);
        }
    });

// Displaying the FrameLayout containing the list of Emoticons
public void showEmojiPopUp(boolean showEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.VISIBLE);
}

// Hiding the FrameLayout containing the list of Emoticons
public void hideEmojiPopUp(boolean hideEmoji) {
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.emojicons);
    frameLayout.setVisibility(View.INVISIBLE);
}

它正在工作 fine.So 我的问题是如何在创建 activity 时将我的框架设置为不可见。它应该显示在 clickinh 图像上 view.The 软键盘的高度和FameLayout 应该是 same.Screenshots 如下:

1.Screenshot

2。点击图片查看

3。单击 EditText

请帮我解决这个问题。

使用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);
}

View.INVISIBLE

This view is invisible, but it still takes up space for layout purposes.

View.GONE

This view is invisible, and it doesn't take any space for layout purposes.

发生这种情况是因为您使用了权重。 删除 weightsum 和 layouts_weight 并使用 wrap_content.

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

并动态地给 framelayout 高度。

int  deviceHeight;
FrameLayout frameLayout;

Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
            display.getSize(size);

            deviceHeight = size.y;

frameLayout= (FrameLayout ) findViewById(R.id.emojicons);

        frameLayout.getLayoutParams().height = (int) (deviceHeight / 3);
    frameLayout.requestLayout();

而不是

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);
}

您正在使用 INVISIBLE 而不是 GONE。 INVISIBLE 仅隐藏视图但不保留 space,如果消失,它也会删除空的 space。所以这里用GONE。