adjustResize 不适用于片段布局内的 EditText 视图
Posted
技术标签:
【中文标题】adjustResize 不适用于片段布局内的 EditText 视图【英文标题】:adjustResize not working with EditText view inside a fragment layout 【发布时间】:2020-02-26 17:48:16 【问题描述】:我有一个全屏活动,其中某些布局元素隐藏以让位于容器内的片段 (FrameLayout)。布局如下图:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/home_layout"
android:layout_
android:layout_
android:background="@drawable/closing_background"
android:orientation="vertical"
tools:context="com.example.activities.MainActivity">
<FrameLayout
android:id="@+id/dim"
android:alpha="0"
android:fitsSystemWindows="true"
android:layout_
android:layout_
android:background="@color/dimBg" />
<RelativeLayout
android:id="@+id/header_layout"
android:layout_
android:layout_
android:layout_marginTop="48dp"
android:layout_alignParentTop="true">
<ImageView
android:id="@+id/menu"
android:visibility="visible"
android:layout_
android:layout_
android:layout_alignParentStart="true"
android:layout_marginStart="24dp"
android:background="@drawable/ic_menu_black_24dp"/>
<ImageView
android:id="@+id/logo_img"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:src="@drawable/ic_app_logo_black" />
</RelativeLayout>
<RelativeLayout
android:layout_
android:layout_
android:layout_below="@id/header_layout"
android:orientation="vertical"
android:layout_marginTop="26dp">
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_
android:layout_ />
</RelativeLayout>
<LinearLayout
android:id="@+id/first_layout"
android:layout_
android:layout_
android:layout_below="@id/header_layout"
android:visibility="gone"
android:orientation="vertical"
android:layout_marginTop="93dp">
<--other layout elements here-->
</LinearLayout>
</RelativeLayout>
片段布局如下图:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parentLayout"
android:orientation="vertical"
android:layout_
android:layout_
android:fillViewport="true"
android:background="@android:color/transparent">
<RelativeLayout
android:id="@+id/rootView"
android:layout_
android:layout_
android:clipChildren="false">
<TextView
android:id="@+id/description"
android:layout_
android:layout_
android:layout_marginTop="6dp"
android:layout_alignParentTop="true"
android:textSize="18sp"
android:lineSpacingMultiplier="1.5"/>
<com.example.MyCustomRecyclerView
android:id="@+id/customRecyclerView"
android:layout_below="@id/description"
android:layout_
android:layout_
android:layout_marginTop="16dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="72dp"
android:clipToPadding="false">
</com.example.MyCustomRecyclerView>
<include layout="@layout/input_view"
tools:visibility = "gone"/>
</RelativeLayout>
</ScrollView>
如您所见,在我的片段布局中,我包含了另一个名为 input_view 的布局。其布局文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/content_slide_up_view"
android:layout_
android:layout_
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.activities.MainActivity"
tools:showIn="@layout/activity_main">
<RelativeLayout
android:id="@+id/slideResponseView"
android:layout_
android:layout_
android:layout_marginTop="26dp"
android:background="@drawable/rounded_up_corners_bg">
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:layout_below="@id/pullDownArrow"
android:text="@string/response_view_title"
android:gravity="center_horizontal"
android:layout_marginTop="16dp"
android:textAllCaps="false"/>
**<EditText
android:id="@+id/response_view_input"
android:layout_
android:layout_
android:layout_below="@id/title"
android:layout_margin="10dp"
android:gravity="top"
android:padding="10dp"/>**
<ImageView
android:layout_
android:layout_
android:layout_alignParentTop="true"
app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp"
android:id="@+id/pullDownArrow"
android:layout_marginTop="15dp"/>
</RelativeLayout>
</RelativeLayout>
这是一个从以下来源获得的 slideUp 面板:https://github.com/mancj/SlideUp-Android,它主要是一个 edittext 视图,在 recyclerview 项目的点击事件上向上滑动。滑块面板在纵向模式下占据 2/3 的屏幕空间(我的应用程序仅为纵向)。现在,当我单击此滑块面板上的 EditText 视图以输入任何文本时,我希望此视图在软键盘从其下方打开时调整大小。我尝试了一些关于 SO 的建议,比如用 ScrollView 包装根布局,但仍然不起作用。
此外,清单文件中的活动包括以下内容:
android:windowSoftInputMode="adjustResize"
如上所述,该活动是一个全屏活动,我正在使用以下代码以编程方式处理它:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
decorView.setSystemUiVisibility(uiOptions);
有人可以在这里指导我吗?如果我的问题或部分代码不清楚,请告诉我,以便我详细说明。
谢谢,
AB
【问题讨论】:
【参考方案1】:将 ScrollView 替换为 NestedScrollView。 还将RelativeLayout 替换为ConstraintLayout。 其他代码没问题。
【讨论】:
片段布局中的这些变化,对吧? Activity 布局没有变化? adjustResize 在 ConstraintLayout 中工作正常。所以你应该更换两者。我认为这将是可行的。 我的问题是,我需要做的唯一改变是在片段布局中,还是在活动布局中也有任何改变?以上是关于adjustResize 不适用于片段布局内的 EditText 视图的主要内容,如果未能解决你的问题,请参考以下文章
windowSoftInputMode:当键盘提示文本时,adjustResize 不适用于数字键盘
text windowSoftInputMode =“adjustResize”不适用于半透明动作/导航栏
E/RecyclerView:没有附加适配器;在片段内的recyclerview上跳过布局
每行带有 EditText 的 Listview , Listview 的 FooterView 内的 Scrollview , adjustResize 和 adjustPan 都工作在一起
使用NSView.layoutSubtreeIfNeeded()动画自动布局约束不适用于macOS High Sierra