无法隐藏 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。
我正在开发 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。