Android Studio - Scrollview在键盘打开时移出屏幕

时间:2017-12-03 01:18:41

标签: android android-studio keyboard scrollview

我想创建一个聊天屏幕,其底部有一个EditText和一个Button(包含在LinearLayout中),顶部的消息包含一个ScrollView。问题是,当用户点击EditText并打开键盘时,ScrollView将因向上移动而离开屏幕。我想移动键盘上方的Layout(使用EditBox和Button),并调整ScrollView的大小以适应屏幕。问题显示在下面的图片中:

enter image description here

正如你所看到的那样,写着" Chat" (左图)在右图中消失了。

我使用这个XML代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15sp"
    android:orientation="vertical"
    android:background="#ccdcf7"
    tools:context="com.orionz.sockettest.ChatActivity">

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="15"
        android:isScrollContainer="false">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/chatBox"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="Chat\n"
                android:textColor="#000000"
                android:textIsSelectable="true"
                android:textSize="22dp" />
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center|bottom"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/msgInput"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.8"
            android:ems="10"
            android:hint="Message..."
            android:inputType="text" />

        <Button
            android:id="@+id/sendButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:background="@drawable/mybutton"
            android:padding="5sp"
            android:text="Send"
            android:textColor="#ffffff"
            android:textSize="20sp" />

    </LinearLayout>

</LinearLayout>

我看过很多答案,例如设置android:windowSoftInputMode但没有一个有效。我使用Android Studio。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

尝试使用ListView替换ScrollView:

<ListView
    android:id="@+id/list_view"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1">
</ListView>

将所有消息存储在ArrayList中,并将适配器设置为您创建的ListView:

ListView listView=(ListView) findViewById(R.id.list_view);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ArrayList);
listView.setAdapter(adapter);

最后,在Button上添加一个监听器,写下这些行:

EditText editText= (EditText) findViewById(R.id.msgInput);
ArrayList.add(editText.getText().toString());
adapter.notifyDataSetChanged();

答案 1 :(得分:0)

将Scrollview包装到整个布局。

即将editText和按钮放在Scrollview中并将scrollView高度设置为android:layout_height="match_parent"

答案 2 :(得分:0)

最后,我发现了我的错误。

  • 主题全屏。在活动的风格中,我有这条线导致了这个问题:

<item name="android:windowFullscreen">true</item>

  • 在java代码中,我给出了一个在活动开始时打开键盘的命令:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

这也是问题的一部分

  • 将adjustResize属性添加到清单中的活动后,一切正常:

android:windowSoftInputMode="adjustResize"