当键盘显示时,我无法推升整个回收站视图,它会切断之前的消息。我创建了一个看起来像这个xml的聊天视图:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/commentsParentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/noCommentsResults"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/lineSep"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="@string/noCommentsFound"
android:textSize="20sp"
android:visibility="gone" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/pullToLoadMore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/lineSep"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="50dp"
android:paddingBottom="10dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/comments_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
/>
</android.support.v4.widget.SwipeRefreshLayout>
<View
android:id="@+id/lineSep"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_above="@+id/commentsAddLayout"
android:background="@color/horizontalLine" />
<LinearLayout
android:id="@+id/commentsAddLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/emojiSelector"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_weight="1"
android:src="@drawable/emoji" />
<EditText
android:id="@+id/commentText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_weight="4"
android:background="@android:color/transparent"
android:hint="@string/add_comment"
android:maxLength="150" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/horizontalLine" />
<TextView
android:id="@+id/sendComment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/send"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这是我的回收者视图代码:
private void setupAdapter() {
//stops lag for recycler view for load
commentsRecyclerView.setHasFixedSize(true);
commentsAdapter = new CommentsAdapter(this, dbCommentsList, TypeFaceProvider.getTypeFace(this, 0),
TypeFaceProvider.getTypeFace(this, 1), TypeFaceProvider.getTypeFace(this, 2));
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
commentsRecyclerView.setLayoutManager(mLayoutManager);
commentsRecyclerView.setItemAnimator(new DefaultItemAnimator());
commentsAdapter.setOnEntryClickListener(new CommentsAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
DatabaseComment comment = dbCommentsList.get(position);
TextView deleteBtn = (TextView) view.findViewById(R.id.commentUserRemove);
if (view == deleteBtn) {
//used to remove the comment from db and the list
db.removeSingleComment(comment);
dbCommentsList.remove(position);
commentsAdapter.notifyDataSetChanged();
} else {
takeToUserProfile(dbCommentsList.get(position));
}
}
});
commentsRecyclerView.setAdapter(commentsAdapter);
commentsRecyclerView.scrollToPosition(0);
hideProgressDialog();
}
这是我的评论适配器:
public class CommentsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static OnEntryClickListener mOnEntryClickListener;
private List<DatabaseComment> dbCommentsList;
private Typeface typeFace, italicTypeface, boldTypeface;
public CommentsAdapter(Context mContext, List<DatabaseComment> comments, Typeface myTypeface, Typeface myTypefaceItalic, Typeface myTypefaceBold) {
Context context = mContext;
dbCommentsList = comments;
typeFace = myTypeface;
italicTypeface = myTypefaceItalic;
boldTypeface = myTypefaceBold;
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0:
return new MyFeatureViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.comment_business_item, parent, false));
case 1:
return new MyViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.comment_user_item, parent, false));
}
return new MyViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.comment_user_item, parent, false));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int pos = getItemViewType(position);
//is a business comment
if (pos == 0) {
MyFeatureViewHolder featureViewHolder = (MyFeatureViewHolder) holder;
DatabaseComment dbComment = dbCommentsList.get(position);
featureViewHolder.commentCompany.setTypeface(boldTypeface);
featureViewHolder.commentCompanyMsg.setTypeface(typeFace);
featureViewHolder.commentCompanyDate.setTypeface(italicTypeface);
featureViewHolder.commentCompany.setText(dbComment.getUsername());
featureViewHolder.commentCompanyMsg.setText(dbComment.getCommentText());
Calendar date = Calendar.getInstance();
date.setTimeInMillis(dbComment.getCommentDate());
int newMonth = date.get(Calendar.MONTH) + 1;
String commentDateTxt = (newMonth + "." + date.get(Calendar.DAY_OF_MONTH) + "." + date.get(Calendar.YEAR));
featureViewHolder.commentCompanyDate.setText(commentDateTxt);
}
//anything greater than 0 is a user comment - with emoji
if (pos == 1) {
MyViewHolder myViewHolder = (MyViewHolder) holder;
if (dbCommentsList.get(position).getIsChanged() == 1) {
myViewHolder.commentUserRemove.setVisibility(View.VISIBLE);
} else {
myViewHolder.commentUserRemove.setVisibility(View.GONE);
}
DatabaseComment dbComment = dbCommentsList.get(position);
myViewHolder.commentUsername.setTypeface(boldTypeface);
myViewHolder.commentUserMsg.setTypeface(typeFace);
myViewHolder.commentUserDate.setTypeface(italicTypeface);
myViewHolder.commentUsername.setText(dbComment.getUsername());
myViewHolder.commentUserMsg.setText(dbComment.getCommentText());
Calendar date = Calendar.getInstance();
date.setTimeInMillis(dbComment.getCommentDate());
//Note only one plus one because of new comments added will
int newMonth = date.get(Calendar.MONTH) + 1;
String commentDateTxt = (newMonth + "." + date.get(Calendar.DAY_OF_MONTH) + "." + date.get(Calendar.YEAR));
myViewHolder.commentUserDate.setText(commentDateTxt);
int[] commentsImageList = new int[]{R.drawable.e1, R.drawable.e1, R.drawable.e2, R.drawable.e3, R.drawable.e4,
R.drawable.e5, R.drawable.e6, R.drawable.e7, R.drawable.e8, R.drawable.e9, R.drawable.e10,
R.drawable.e11, R.drawable.e12, R.drawable.e13, R.drawable.e14,
R.drawable.e15, R.drawable.e16, R.drawable.e17, R.drawable.e18, R.drawable.e19};
myViewHolder.emojiIcon.setImageResource(commentsImageList[dbComment.getIsType()]);
}
}
@Override
public int getItemCount() {
return dbCommentsList.size();
}
@Override
public int getItemViewType(int position) {
if (dbCommentsList.get(position).getIsType() == 0) {
return 0;
} else {
return 1;
}
}
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView commentUsername, commentUserMsg, commentUserDate, commentUserRemove;
public ImageView emojiIcon;
public MyViewHolder(View view) {
super(view);
commentUsername = (TextView) view.findViewById(R.id.commentUsername);
commentUserMsg = (TextView) view.findViewById(R.id.commentUserMsg);
commentUserDate = (TextView) view.findViewById(R.id.commentUserDate);
commentUserRemove = (TextView) view.findViewById(R.id.commentUserRemove);
emojiIcon = (ImageView) view.findViewById(R.id.emojiIcon);
view.setOnClickListener(this);
commentUserRemove.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getAdapterPosition());
}
}
}
public class MyFeatureViewHolder extends RecyclerView.ViewHolder {
public TextView commentCompany, commentCompanyMsg, commentCompanyDate;
public ImageView emojiIcon;
public MyFeatureViewHolder(View view) {
super(view);
commentCompany = (TextView) view.findViewById(R.id.commentCompany);
commentCompanyMsg = (TextView) view.findViewById(R.id.commentCompanyMsg);
commentCompanyDate = (TextView) view.findViewById(R.id.commentCompanyDate);
emojiIcon = (ImageView) view.findViewById(R.id.emojiIcon);
}
}
}
因此,当选择编辑文本框时,列表视图中的消息不会向上移动,而是SEND按钮和其他消息 - 所以不确定我需要做什么来推高评论视图?看起来我可能有布局问题 - 但尝试其他问题的答案并没有解决它:
解决方案1: 当键盘弹出时,调整盘将视图向上推过电池和时间在状态栏中并略微切断视图底部。
解决方案2: adjustresize看不到视图仍然保持不变。
答案 0 :(得分:3)
如果要在打开软键盘时调整内容大小,请使用adjust resize
<application ... >
<activity
android:windowSoftInputMode="adjustResize" ... >
...
</activity>
...
</application>
或者如果您希望将屏幕推到顶部,请在清单中使用adjustPan
<application ... >
<activity
android:windowSoftInputMode="adjustPan" ... >
...
</activity>
...
</application>