如何防止Android浮动EditText提示覆盖EditText中的文本?

时间:2015-06-22 21:32:51

标签: android android-edittext material-design

所以我有一个带有EditText的片段以及一个浮动提示。问题是,当我启动片段并且EditText已经有一个值时,浮动提示会在提示开始浮动之前的短暂时间内覆盖文本。当我启动片段而不是覆盖文本时,如何使浮动提示开始浮动?

problem

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

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

这是片段的布局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>

这是我的片段的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;
    }

2 个答案:

答案 0 :(得分:1)

尝试在android:hint而不是TextInputLayout

上设置EditText
<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>

答案 1 :(得分:0)

应修复以便编译&#39; com.android.support:design:23.0.1&#39;