gpt4 book ai didi

android - 带有键盘向上移动的编辑文本的 Bottom Sheet

转载 作者:行者123 更新时间:2023-11-29 14:19:38 25 4
gpt4 key购买 nike

我有 Bottom Sheet fragment 显示用户对他的评论的回答。在 Bottom Sheet 的底部,我们有编辑文本,用户可以在其中添加新评论。所以,当软键盘打开时,bottomsheet 位于键盘上方,其顶部移动到屏幕之外。但是当键盘打开时, Bottom Sheet 应该调整大小。

这是我的代码:

<android.support.design.widget.CoordinatorLayout
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">

<RelativeLayout

android:layout_width="match_parent"
android:layout_height="match_parent">

<include android:id="@+id/toolbar_layout"
layout="@layout/partial_toolbar" />

<android.support.v7.widget.RecyclerView
android:id="@+id/list_comments"
android:layout_below="@+id/toolbar_layout"
android:layout_width="match_parent"
android:overScrollMode="always"
android:layout_height="match_parent"/>

<View
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_above="@+id/comment_container"
android:layout_alignBaseline="@+id/list_comments"
android:background="@drawable/elevation_bottom"/>


<LinearLayout
android:id="@+id/comment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ebffffff"
android:layout_alignParentBottom="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="@dimen/vertical_spacing"
android:paddingEnd="@dimen/horizontal_spacing"
android:paddingStart="8dp"
android:paddingTop="@dimen/vertical_spacing">

<android.support.v7.widget.AppCompatImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:src="@drawable/ic_add_blue_small"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/bg_message_field"
android:gravity="center_vertical"
android:orientation="horizontal">

<android.support.v7.widget.AppCompatEditText
android:id="@+id/edit_comment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/transparent"
android:hint="@string/comments_add_comment_hint"
android:inputType="textMultiLine"
android:maxLength="200"
android:maxLines="3"
android:minLines="1"
android:paddingBottom="8dp"
android:paddingEnd="0dp"
android:paddingStart="8dp"
android:paddingTop="8dp"
android:textSize="14sp"
app:fontFamily="@font/lora_regular"/>

<android.support.v7.widget.AppCompatImageButton
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@color/transparent"
app:srcCompat="@drawable/ic_send_message"/>

</LinearLayout>

</LinearLayout>

</RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

list 中的 Activity (此 Activity 打开对话框)

    <activity
android:name=".presentation.ui.category.CategoryDetailsActivity"
android:configChanges="locale|orientation|screenSize|keyboard"
android:windowSoftInputMode="adjustResize"
android:windowTranslucentNavigation="true"
android:windowTranslucentStatus="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Main.NoActionBar" />

我还把这段代码放到方法setupDialog

dialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

和截图 enter image description here

最佳答案

here 得到这个答案

因为我在我的一个项目中也遇到了同样的问题,

BottomSheetFragmentonCreateDialog 中使用这个

new KeyboardUtil(getActivity(), rootView);

通过使用下面的类

public class KeyboardUtil {
private View decorView;
private View contentView;
//a small helper to allow showing the editText focus
ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
decorView.getWindowVisibleDisplayFrame(r);

//get screen height and calculate the difference with the useable area from the r
int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;
int diff = height - r.bottom;

//if it could be a keyboard add the padding to the view
if (diff != 0) {
// if the use-able screen height differs from the total screen height we assume that it shows a keyboard now
//check if the padding is 0 (if yes set the padding for the keyboard)
if (contentView.getPaddingBottom() != diff) {
//set the padding of the contentView for the keyboard
contentView.setPadding(0, 0, 0, diff);
}
} else {
//check if the padding is != 0 (if yes reset the padding)
if (contentView.getPaddingBottom() != 0) {
//reset the padding of the contentView
contentView.setPadding(0, 0, 0, 0);
}
}
}
};

public KeyboardUtil(Activity act, View contentView) {
this.decorView = act.getWindow().getDecorView();
this.contentView = contentView;

//only required on newer android versions. it was working on API level 19
if (Build.VERSION.SDK_INT >= 19) {
decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
}

/**
* Helper to hide the keyboard
*
* @param act
*/
public static void hideKeyboard(Activity act) {
if (act != null && act.getCurrentFocus() != null) {
InputMethodManager inputMethodManager = (InputMethodManager) act.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(act.getCurrentFocus().getWindowToken(), 0);
}
}

public void enable() {
if (Build.VERSION.SDK_INT >= 19) {
decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
}

public void disable() {
if (Build.VERSION.SDK_INT >= 19) {
decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
}
}
}

关于android - 带有键盘向上移动的编辑文本的 Bottom Sheet ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48302171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com