Android:ListView推出其下的所有其他内容

时间:2016-02-26 03:24:44

标签: android android-layout listview android-fragments

在我的应用中,有一个带有三个fragments的标签式活动。第一个片段具有用于创建新任务的表单,第二个片段具有所有已保存任务的列表,第三个片段将在从第二个片段中的列表中选择时显示对任务的注释。第三个fragment也应该像聊天活动一样,在您输入评论时发布评论并点按发送按钮。第三个fragment的XML布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:orientation="vertical"
tools:context="com.example.ishita.assigntasks.CommentsFragment">

<TextView
    android:id="@+id/frag_task_details"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#dd55ff"
    android:padding="10dp" />

<ListView
    android:id="@+id/frag_comment_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@android:color/white">

    <EditText
        android:id="@+id/frag_msg_edit"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:layout_weight="1" />

    <ImageButton
        android:id="@+id/frag_send_btn"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@android:color/background_light"
        android:contentDescription="@string/send_btn"
        android:src="@android:drawable/ic_menu_send" />

</LinearLayout>

</LinearLayout>

正如您所看到的,有一个TextView和一个ListView以及另一个LinearLayout。它的外观如下(紫色条是TextView):

expected_behavior

以下是它的实际外观:

malfunctioning_behavior

TextView显示在ListView之上,但LinearLayout没有显示。它在那里。如果我在最外面的android:layout_marginBottom="20dp"LinearLayout,它会显示,但ActionBar会向上滚动并与通知栏重叠,以便ActionBar上的标题和通知栏上的通知同时可见,也不清晰。

我搜索了很多,这似乎是一个常见的问题,但没有一个解决方案帮助了我。相信我,我尝试了所有我能找到的东西。我尝试使用FrameLayout代替最外面的RelativeLayout将整个内容包裹在LinearLayout中,使用两个LinearLayout s - 一个来封装TextViewListView以及另一个包裹EditTextImageButton等,但没有任何内容可以显示LinearLayout下面的ListView底部。我甚至尝试在片段启动时将焦点设置在EditText上,以便键盘显示并且我可以输入,但即使这样也没有帮助。

注意:另一方面,如果我在activity上使用完全相同的布局,则底部LinearLayout会完全按照原样显示。

我无法找到错误。请帮忙!

4 个答案:

答案 0 :(得分:1)

看起来您的工具栏会向下推动片段布局而不会降低其高度。我不知道为什么会这样(这里没有根布局代码)。

作为一种解决方法,您可以将片段布局底部边距设置为?attr/actionBarSize

答案 1 :(得分:0)

由于您在listview布局中给出了layout_weight 1,因此它占用了整个可用空间。为了摆脱你必须给出一些静态高度或以正确的方式使用layout_weight

<ListView
android:id="@+id/frag_comment_list"
android:layout_width="match_parent"
android:layout_height="500dp"
android:transcriptMode="normal" />

或尝试这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:orientation="vertical"
tools:context="com.example.ishita.assigntasks.CommentsFragment">

   <TextView
   android:id="@+id/frag_task_details"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="#dd55ff"
   android:padding="10dp" />
  <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_weight="1"
    android:orientation="vertical"
  android:background="@android:color/white">
  <ListView
android:id="@+id/frag_comment_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transcriptMode="normal" />
</LinearLayout>
 <LinearLayout
android:layout_width="match_parent"
 android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:background="@android:color/white">

<EditText
    android:id="@+id/frag_msg_edit"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:layout_weight="1" />

<ImageButton
    android:id="@+id/frag_send_btn"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0"
    android:background="@android:color/background_light"
    android:contentDescription="@string/send_btn"
    android:src="@android:drawable/ic_menu_send" />

   </LinearLayout>

   </LinearLayout>

答案 2 :(得分:0)

所有

感谢您的回复。我现在通过反复试验找到了一种解决方法,并认为我应该为面临同样问题的其他人发布答案。我在内部android:layout_marginBottom="50dp"(包含评论栏的{ - 1}}和LinearLayout)上设置了EditText。不知何故,这会正确设置布局,并且片段在Lollipop和Jellybean OS中都能正常运行。我没有在其他操作系统版本上测试过。

答案 3 :(得分:0)

首先,您应该阅读thislayout_weight是什么以及它是如何运作的。

您已将layout_weight指定为ListView作为1,这意味着它涵盖了整个高度。只需将其更改为0.7或任何您想要的比例(小于1)即可解决问题。

<ListView
    android:id="@+id/frag_comment_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.7"
    android:transcriptMode="normal" />