2016-01-19 62 views
1

我在Android即时聊天工作的Application.In聊天活动,我使用的是FrameLayout里。继是XML文件:无法隐藏的FrameLayout

<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在开始时不占用空间.ImageView,EditText和Send Message按钮应位于屏幕的底部。单击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); 
} 

它工作正常。所以我的问题是如何设置我的框架在活动创建时不可见。它应该显示在clickinh图像视图上。软键盘和FameLayout的高度应该相同。Screenshots给出下面:

1.Screenshot

Screenshot

2.在点击图像视图

enter image description here

3.点击EditText上 enter image description here

请帮我解决这个问题。

+0

我认为在这种情况下,你不应该在这种情况下使用的重量。试着给它固定高度 –

+0

怎么样'setVisibility(View.GONE)' –

回答

2

这是因为你使用的是重量而发生的。 删除权重和layouts_weight并使用wrap_content。

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

并给出framelay的动态高度。

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

感谢Aakash.It正在为我工​​作,你能告诉我如何控制软键盘的高度吗?其实在我的情况下,软键盘和表情符号键盘的高度是不同的。我想使它平等。 –

1

使用View.INVISIBLEView.GONE代替

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

这种观点是无形的,但它仍然占用空间布局 目的。

View.GONE

这种观点是不可见的,并且它不承担布局 目的的任何空间。

+0

在点击图像视图,一切工作fine.But问题是在创建第一次聊天活动时,FrameLayout里占据一定的空间.U可以看到XML我已经设置了可视性走了。我也不想的FrameLayout在这里占据了一些空间文件。 –

+0

它仍然无法正常工作。 Plz的帮助。 –

0

您正在使用无形的,而不是消失。 INVISIBLE只隐藏视图但不留空间,如果不存在,则删除空的空间。所以在这里使用GONE。

+0

我在设计ChAT活性。作为屏幕u能看到越来越的问题,我想一个列表视图,线性布局(含有imageview的,的EditText,发送信息按钮),并在一个design.I帧布局已经使用线性布局解决我purpose.But它不工作了我。我曾使用过早期的重量甚至。所以作为设置了的公开程度后,。当我删除从线性布局重量帧布局中占据一定的空间,并指定固定的高度,仍然是其不为我工作。 –

+0

你需要采取甲A的LinearLayout与“Match_Parent”宽度和高度,方向垂直的主父。在这个LinearLayout里面,带一个ListView,宽度为match_parent,高度为0dp。并给予重量1.现在再采用另一个LinearLayout来表示图像的这种设计布局,edittext nad发送button.close这个LinearLayout在这里,最后创建您的视图为imozy。 –