CoordinatorLayout弄乱了setError弹出位置

Mid*_* MP 8 android android-linearlayout android-edittext android-coordinatorlayout

我正面临着EditText setError弹出位置的问题.

编辑文本错误

我正在使用以下代码来创建布局:

activity_profile.xml

<?xml version="1.0" encoding="utf-8"?>
<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" android:fitsSystemWindows="true"
    tools:context=".ProfileActivity"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
        android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

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

    <include layout="@layout/profile" />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

是profile.xml

<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".ProfileActivity"
    tools:showIn="@layout/activity_profile">

    <EditText
        android:id="@+id/etProfileName"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:capitalize="words"
        android:hint="@string/et_hint_profile_name"
        android:textAlignment="center" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我试过了什么

如果我改变了android.support.design.widget.CoordinatorLayoutLinearLayoutsetError问题不会发生,但将在状态栏颜色更改为白色的,我的UI正在奇怪.

已更正,状态栏问题

我是Android编程的新手,不知道发生了什么,请帮助我.

Dmt*_*Dmt 0

我有同样的问题。测试了一点 UI,我发现当 EditText 小部件以编程方式获得焦点以显示错误时出现问题,在我的例子中调用.requestFocus(),但是当再次手动聚焦小部件时,弹出窗口显示正确。

所以我的解决方法是延迟.requestFocus()对 Runnable 的调用(模拟用户单击 EditText 小部件)。

这是代码:

        if (mFocusView != null) mFocusView.clearFocus(); // clear current focus. Needed to simulate a new "manual" focus

        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                final Handler handler = new Handler();
                final boolean b = handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mFocusView.requestFocus(); // request focus
                    }
                }, 1); // only delay 1 milisecond
            }
        });
Run Code Online (Sandbox Code Playgroud)

mFocusView是当前的 EditText 视图来显示错误。

根据您的使用情况,您可能需要在键盘关闭时处理焦点,因为它会使弹出窗口再次出现在错误的位置。

不知道这是否能解决您的问题。希望谷歌解决这个问题时它能有所帮助。