EditText用户输入显示在提示文本的顶部

时间:2017-03-16 13:51:31

标签: android android-edittext

我有一个现有的项目,但最近开始在最近的更新中显示错误的edittext。我没有改变,因为应用程序的这个特定部分,在下面的屏幕截图中,没有改变,所以我期待它在支持库中的一些错误,但不确定。

基本上问题是,当用户在编辑文本中输入文本时,提示文本不会消失,它仍然可见,如下面的屏幕截图所示。

Screenshot showing problem

以下是此特定布局的XML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
    <include layout="@layout/toolbar" />
    <ScrollView
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
        <LinearLayout android:id="@+id/controlContainer"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:orientation="vertical" />
    </ScrollView>
    <TextView android:id="@+id/noPrimaryKeyInfo"
       android:background="@color/api_error_background"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/no_primary_key_available_therefore_updates_and_deletes_cannot_be_done"
       android:textStyle="bold"
       android:layout_gravity="center_horizontal"
       android:gravity="center_horizontal"
       android:layout_alignParentBottom="true"
       android:padding="5dp"/>
    <TextView android:id="@+id/lblUpgradeStatus"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:visibility="gone"/>
</LinearLayout>

然后使用以下代码

以编程方式填充EditTexts
Bundle bundle = getIntent().getExtras();
        indexAndFields = (HashMap<Integer, String>) bundle.getSerializable("indexAndFields");
        fieldAndValue = (HashMap<Integer, String>) bundle.getSerializable("fieldAndValue");
        currentTableName = bundle.getString("tableName");

        fieldDataList = rebuildFieldDataListFromJson(bundle.getString("tableAndDescription"));
        Log.d("RowEditor", bundle.getString("tableAndDescription"));
        lblNoPrimaryKeyInfo = (TextView)findViewById(R.id.noPrimaryKeyInfo);

        for (Integer data : fieldAndValue.keySet())
        {
            int index = data;

            FieldData fieldData = getFieldDataFromFieldName(indexAndFields.get(index));

            TextInputLayout textInputLayout = new TextInputLayout(this);

            EditText editText = new EditText(RowEditor.this);
            editText.setHint(indexAndFields.get(index));
            editText.setText(fieldAndValue.get(data));
            if (!purchaseUpgraded)
            {
                editText.setEnabled(false);
            }
            fieldData.setEditText(editText);
            fieldDataList.remove(index);
            fieldDataList.add(index, fieldData);

            textInputLayout.addView(editText);

            if (fieldData.getIsPrimaryKey())
            {
                isPrimaryKeyAvailable = true;
                primaryKeyColumn = indexAndFields.get(index);
                originalPrimaryKeyValue = fieldAndValue.get(data);
                lblNoPrimaryKeyInfo.setVisibility(View.GONE);
            }
            controlContainer.addView(textInputLayout);
        }
        //Check if primary key is available, if not, disable all controls and display notification
        disableControlIfNoPrimaryKey();
    }

2 个答案:

答案 0 :(得分:0)

也许文本更改侦听器可以提供快速修复

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        if(editText.Text == "")
        {
            editText.setHint(hint);
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        editText.setHint("");
    }
});

答案 1 :(得分:0)

正如@MikeM所提到的,支持库的25.1.0版本中存在一个导致此问题的错误。我更新了我的gradle.build文件以使用支持库的25.3.0版本,现在已经解决了这个问题。