我想创建一个聊天屏幕,其底部有一个EditText和一个Button(包含在LinearLayout中),顶部的消息包含一个ScrollView。问题是,当用户点击EditText并打开键盘时,ScrollView将因向上移动而离开屏幕。我想移动键盘上方的Layout(使用EditBox和Button),并调整ScrollView的大小以适应屏幕。问题显示在下面的图片中:
正如你所看到的那样,写着" 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。任何帮助将不胜感激。
答案 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>
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这也是问题的一部分
android:windowSoftInputMode="adjustResize"