在我的聊天应用程序中,我有一个带有listview的布局(两个用户之间的聊天)和一个edittext输入,用于为同一个对话编写新消息。 第一个问题发生在用户点击输入时 - 弹出一个软键盘,但列表视图保持与以前相同的位置,而不是与edittext输入一起跳起并保持相同的间隔。
第二个问题是当我解除键盘并返回到具有大量行的默认状态时,列表视图再次保持在同一位置并且edittext与其重叠。
我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_bg"
android:gravity="right"
android:orientation="vertical" >
<include
android:layout_alignParentTop="true"
layout="@layout/actionbar_layout" />
<ListView
android:id="@+id/lsvMessage"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="0dp"
android:layout_marginTop="50dp"
android:background="@color/_transperant"
android:divider="@null"
android:dividerHeight="0dp">
</ListView>
<LinearLayout
android:id="@+id/txtMsgLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:background="@color/_transperant">
<EditText
android:id="@+id/txtMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:ems="10"
android:hint="@string/btn_ask_hint"
android:background="@drawable/edit_text_style"
android:textColor="@color/_white"
android:singleLine="true"
android:textAlignment="viewStart"
android:inputType="textMultiLine|textCapSentences|textNoSuggestions"
android:layout_weight="1">
</EditText>
<RelativeLayout
android:id="@+id/message_spinner_layout"
style="@style/layout_fill_width"
android:gravity="right"
android:layout_weight="0">
<Spinner
android:id="@+id/message_lng_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_margin="10dp"
android:gravity="right"
android:paddingLeft="10dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="right"
android:background="@drawable/spinner_setting"
android:layout_alignBottom="@id/message_lng_spinner"
android:layout_marginBottom="12dp"
android:layout_marginRight="20dp" />
</RelativeLayout>
<Button
android:id="@+id/btnSend"
style="@style/submit_button_style"
android:text="@string/btnSend"
android:background="@drawable/submit_button"
android:layout_weight="0"/>
</LinearLayout>
</RelativeLayout>
我尝试以编程方式修复它并计算edittext布局的高位以相应地移动listview但它没有工作。
final View activityRootView =
((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
final View msgLayout = (ViewGroup)findViewById(R.id.txtMsgLayout);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener
(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) {
scrollMyListViewToBottom();
} else {
int heighListview = msgLayout.getHeight();
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)
lsvMessage.getLayoutParams();
params.setMargins(0,50,0,heighListview);
lsvMessage.setLayoutParams(params);
}
}
});
我可以使用正确标记的布局或代码来修复它吗?
答案 0 :(得分:0)
我有同样的问题。我已经尝试了stackoverflow中的所有答案,但没有任何最终的解决方案。
我从谷歌原生消息应用程序中找到了解决方案: ComposeMessageActivity layout
ComposeMessageActivity这里有一个方法:&#34; smoothScrollToEnd &#34;
并且有一个MessageListView.java类用于检测onSizeChanged。