【问题标题】:How do I prevent Android floating EditText hint from covering the text in the EditText?如何防止 Android 浮动 EditText 提示覆盖 EditText 中的文本?
【发布时间】:2015-06-22 21:32:51
【问题描述】:

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

图片是提示覆盖文字时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;
    }

【问题讨论】:

  • 你用什么做浮动提示? IOW,代码,请。
  • 输入文本时提示应该消失。不要使用 TextView 作为提示,通过 xml 中的 android:hint="[your_hint_string]" 使用 EditText 的提示属性

标签: android android-edittext material-design


【解决方案1】:

尝试在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:hint 似乎 TextInputLayout 似乎完全删除了提示
【解决方案2】:

应该修复编译'com.android.support:design:23.0.1'

【讨论】:

  • 25+ 再次出现问题 :(
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 2017-11-22
  • 2013-06-29
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多