当键盘显示

时间:2016-03-21 12:33:06

标签: android listview

我是Android编程的新手,所以请耐心等待... 我正在尝试在android中创建一个聊天UI,因为我需要有一个edittext字段,并在屏幕的其余部分发送消息按钮和listview(消息)(在编辑文本上方和发送消息按钮的上方)。我可以为此创建UI,但是当我显示键盘时,listview中的最后一条消息与edittext字段重叠。

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="codes.electrux.lets_start_android.PostAuthenticate">


    <ListView
        android:layout_width="wrap_content"
        android:layout_height="410dp"
        android:id="@+id/listView" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true">


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

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_send"
            android:layout_gravity="bottom"
            android:onClick="sendMessage" />



    </LinearLayout>


</RelativeLayout>

以下是键盘显示时发生的情况:

problem

这是没有键盘的样子: without keyboard

我尝试了所有可以在stackoverflow上找到的解决方案,但老实说,无法理解其中的大多数。

请帮忙,

谢谢和问候,

electrux。

3 个答案:

答案 0 :(得分:0)

尝试执行以下操作,

只需将列表高度从默认更改为wrap_content, 并为linearLayout提供一个id,使listView放在LinearLayout上面。

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_above="@+id/test"/>

<LinearLayout
    android:id="@+id/test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">

答案 1 :(得分:0)

请尝试这样做。

此处您的线性布局将包含在列表视图中,因此它将覆盖列表的最后一项。只需更改如下,它就会起作用。

只需将此代码替换为您的xml。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="codes.electrux.lets_start_android.PostAuthenticate">


    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="410dp"
        android:layout_above="@+id/linearLayout" />

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_alignParentBottom="true">


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

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:onClick="sendMessage"
            android:text="Send Data" />


    </LinearLayout>


</RelativeLayout>

它完成了。

希望这会对您有所帮助。

答案 2 :(得分:0)

你应该做的第一件事是将ListView设置为match_parent widht和height。

接下来,在您的清单中,您应该声明您的活动:

<activity android:name=".ConversationChatActivity"
                  android:windowSoftInputMode="adjustResize"
                  >

并且在活动中listView应该应用这个:

listview = (ListView) this.findViewById(R.id.listMessages);
listview.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
listview.setStackFromBottom(true);

希望它可以帮到你!!