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