ListView / Button在LinearLayout中不可见

时间:2014-01-07 20:58:31

标签: android android-layout listview android-listview

无论我做什么,它都无法正常工作。这是一个布局代码,我试图将其实现到另一个布局中,稍后我会解释。以下是精美布局的片段:

<?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:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true" 
    android:padding="8dip" >  
<ListView android:id="@+id/in"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stackFromBottom="true"
    android:transcriptMode="alwaysScroll"
    android:layout_gravity="bottom"
    android:layout_weight="1" />

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    <EditText android:id="@+id/edit_text_out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="bottom" />
    <Button android:id="@+id/action_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/action_send" />
</LinearLayout>  
</LinearLayout>

我想使用此布局将其放入另一个LinearLayout,以便我可以在给定的Fragment上拆分屏幕。这就是我想要实现的目标:

<?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:weightSum="2"
android:orientation="vertical" >

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.8"
    android:background="#192832">
</LinearLayout>
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1.2"
    android:background="#193222"
    android:gravity="bottom" >

<ListView android:id="@+id/in"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stackFromBottom="true"
    android:transcriptMode="alwaysScroll"
    android:layout_gravity="bottom" /> 
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    <EditText android:id="@+id/edit_text_out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="bottom" />
    <Button android:id="@+id/action_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/action_send" />
</LinearLayout>   
</LinearLayout>
</LinearLayout>

正如您所看到的,它实际上已被拆分,但ListView覆盖甚至使EditTextButton消失。我应该做些什么改变才能完成所有工作?我正在尝试android:layout_weight但没有成功。将android:layout_weight="1"添加到ListView部分后,我就松开了。我不想使用RelativeLayout,但如果这里没有解决方案,我会继续使用。

2 个答案:

答案 0 :(得分:1)

您需要一个RelativeLayout来将EditText和Button与底部对齐。我将你的第二个内部LinearLayout更改为RelativeLayout。然后,我将EditText和Button与父视图的底部对齐。并且您的ListView在EditText和Button上方对齐。以下是我的更改:

<?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:weightSum="2"
    android:orientation="vertical">

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="0dp" 
    android:layout_weight="0.8"
    android:background="#192832" />

<RelativeLayout android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="0dp"
    android:layout_weight="1.2" 
    android:background="#193222"
    android:gravity="bottom">

    <ListView android:layout_above="@+id/edit_text_and_button"
        android:id="@+id/in" 
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll" 
        android:layout_gravity="bottom" />

    <LinearLayout android:id="@id/edit_text_and_button"
        android:layout_alignParentBottom="true" 
        android:orientation="horizontal"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content">

        <EditText android:id="@+id/edit_text_out"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_weight="1" 
            android:layout_gravity="bottom" />

        <Button android:id="@+id/action_send" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/action_send" />

    </LinearLayout>

</RelativeLayout>

</LinearLayout>

答案 1 :(得分:0)

你的问题是ListView的高度设置为match_parent,这会将其下方的LinearLayout推到屏幕外。要解决此问题,您可以将底部的LinearLayout的权重更改为0,将ListView的权重更改为一,这样它将首先计算底部栏的大小,然后ListView将扩展为填补剩余的空间。这段代码似乎达到了你想要的目的:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="0.8"
    android:background="#fff" >
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.2"
    android:background="#fff"
    android:gravity="bottom"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/in"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="0" >

        <EditText
            android:id="@+id/edit_text_out"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1" />

        <Button
            android:id="@+id/action_send"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="@string/action_send"
            android:layout_weight="1" />
    </LinearLayout>
</LinearLayout>