android中的EditText在输入文本时回到顶部布局

Posted

技术标签:

【中文标题】android中的EditText在输入文本时回到顶部布局【英文标题】:EditText In android goes back to the top the layout when typing text 【发布时间】:2021-09-20 00:26:31 【问题描述】:

当在相对布局(包含在滚动视图中)中添加 EditText 视图时,在输入文本时它会将用户带回到活动的顶部,(捕捉到屏幕顶部)使用户无法看到他们的内容正在打字。

复制问题

这是该问题的最小再现:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_
        android:layout_>

        <ImageView
            android:layout_
            android:layout_
            android:src="@color/purple_500"/>
        <EditText
            android:layout_
            android:layout_
            android:translationY="800dp"/>

    </RelativeLayout>

</ScrollView>

到目前为止我所尝试的

到目前为止,我已经尝试将 &lt;activity android:windowSoftInputMode="stateVisible|adjustResize" .&gt; 添加到 android 清单中,但它没有任何区别并填充 EditText 尽管我找不到其他发生这种情况的情况。

wrap_content 添加到android:layout_height="", 并没有解决问题

编辑

我需要在线性布局中包含编辑文本,在相对布局中,如此处所示 -https://***.com/questions/40316454/edittext-moves-textview-out-of-the-screen-什么时候打开键盘

【问题讨论】:

这可能是因为你的 RecyclerView 有 match_parent 而不是 wrap_content。试试看 我可以知道你为什么将 ImageView 的高度设置为 1000dp 吗? 这只是证明当输入@vijay 时 EditText 不在屏幕上 您是否考虑过使用 ConstraintLayout 而不是 RelativeLayout(已弃用)? 【参考方案1】:

为避免在 EditText 上写入期间自动滚动到顶部效果,您可以创建 ScrollView 的子类并将 0 返回到受保护的方法:computeScrollDeltaToGetChildRectOnScreen(Rect rect)

computeScrollDeltaToGetChildRectOnScreen

计算在 Y 方向上滚动的量以获得 矩形完全在屏幕上(或者,如果比屏幕高,在 至少是它的第一个屏幕大小块)。

创建 ScrollView 的子类并在该方法上返回 0,如下所示:

public class CustomScrollView extends ScrollView 

    public CustomScrollView(Context context) 
        super(context);
    

    public CustomScrollView(Context context, AttributeSet attrs) 
        super(context, attrs);
    

    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);
    

    @Override
    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) 
        return 0;
    

Xml 用法:

<?xml version="1.0" encoding="utf-8"?>
<my.package.name.CustomScrollView
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_
        android:layout_>

        <ImageView
            android:layout_
            android:layout_
            android:src="@color/purple_500"/>
        <EditText
            android:layout_
            android:layout_
            android:translationY="800dp"/>

    </RelativeLayout>

</my.package.name.CustomScrollView>

【讨论】:

以上是关于android中的EditText在输入文本时回到顶部布局的主要内容,如果未能解决你的问题,请参考以下文章

android中的格式化EditText

Android edittext 视图在文本输入时被修剪

Android - MD之TextInputLayout的使用

Android,从edittext中获取文本[重复]

Android中的EditText中,输入信息时,怎么能让光标停靠在输入的信息的右侧而不是左侧呢?

将文本输入到 EditText 中的问题