android - 如何防止 Android float EditText 提示覆盖 EditText 中的文本?

标签 android android-edittext material-design

所以我有一个带有 EditText 和 float 提示的 fragment 。事情是当我开始 fragment 并且 EditText 已经有一个值时, float 提示在提示开始 float 之前短暂地覆盖文本。当我启动 fragment 而不是覆盖文本时,如何使 float 提示开始 float ?

problem

图片是提示覆盖文本时EditText的样子

编辑: 好的,看起来我对问题的措辞有点令人困惑。 所以我有一个 RecyclerView,它是一个列表,当按下一个列表项时,它会启动这个 fragment (来自 http://imgur.com/a/tdjQv 的第一张图片我们称之为 infoFragment)。用户在 infoFragment 中输入标题和详细信息并保存数据。现在,每当用户返回到同一个 infoFragment 时,他们之前输入的数据应该已经存在,就像 imgur 相册中的第二张图片一样。信息已保存,但当 infoFragment 启动一秒钟时,UI 看起来像图像相册中的第三张图片,一瞬间又像第二张图片。

这是我的 fragment 布局 xml: mExercise 是一个类中的对象,该类包含标题和详细信息的值

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:focusable="true"
              android:focusableInTouchMode="true">

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

    <android.support.design.widget.TextInputLayout
        android:id="@+id/title_textInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp">

        <EditText
            android:id="@+id/exercise_title"
            style="@style/Widget.AppCompat.EditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Title"
            />

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

    <android.support.design.widget.TextInputLayout
        android:id="@+id/details_textInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp">

        <EditText

            android:id="@+id/exercise_details"
            style="@style/Widget.AppCompat.EditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Details"/>

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

</LinearLayout>

这是我 fragment 的 onCreateView 方法:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_exercise, parent, false);

        mToolbar = (Toolbar)v.findViewById(R.id.toolbar);
        ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(" ");

        mTitleField = (EditText)v.findViewById(R.id.exercise_title);
        if(mExercise.getTitle() != null) {
            mTitleField.setText(mExercise.getTitle());
        }
        mTitleField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                mExercise.setTitle(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        mDescriptionField = (EditText)v.findViewById(R.id.exercise_details);
        if(mExercise.getDetails() != null) {
            mDescriptionField.setText(mExercise.getDetails());
        }
        mDescriptionField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                mExercise.setDetails(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

   return v;
    }

最佳答案

尝试在 TextInputLayout 而不是 EditText 上设置 android:hint

<android.support.design.widget.TextInputLayout
    android:id="@+id/title_textInput"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:hint="Title">

    <EditText
        android:id="@+id/exercise_title"
        style="@style/Widget.AppCompat.EditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

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

关于android - 如何防止 Android float EditText 提示覆盖 EditText 中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30990192/

相关文章:

java - 如何在 requestLocationUpdates 中使用 Looper?

java - XML 淡出动画不起作用

java - 将对象从 Activity 传递到 Activity android eclipse

android - 通过按下提交按钮从多个 fragment 获取值到 Activity

java - EditText OnClickListener 需要两次点击才能工作

android - TextInputLayout 样式

android - 需要帮助将 AsyncTask 转换为 RxJava

android - EditText - 只允许上下文已知的特定字符

android - ShowCase View 是否有 Material Design 规范?

Android 按钮背景颜色