4

我正在创建一个电子邮件表单,并希望在 EditText 中包含无法删除的文本。在下面的屏幕截图中,To无法删除。

无法删除 From - 这可能吗?

如果有人对如何实现上述目标有建议,那就太好了 - 谢谢。

我当前的ToEditText 框代码:

<EditText
    android:id="@+id/editText2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_marginTop="0dp"
    android:hint="@string/email_to" >
</EditText>

问题是android:hint当用户开始发短信时文本消失,并且android:text可以被用户删除。

我们如何拥有无法删除的文本?谢谢。

笔记:

另外,我想指出我有一个使用清除按钮清除文本的方法 - 这很好用 - 但我希望它不会删除固定文本(如果我实现了!)..这是代码:

private void clearForm(ViewGroup group)
{       
    for (int i = 0, count = group.getChildCount(); i < count; ++i) {
    View view = group.getChildAt(i);
    if (view instanceof EditText) {
        ((EditText)view).setText("");
    }

    if(view instanceof ViewGroup && (((ViewGroup)view).getChildCount() > 0))
        clearForm((ViewGroup)view);
}
}

解决方案:

管理这样做的迂回方式。我在嵌套的线性布局中创建了一个 TextView 和 EditText 。我使用 . 关闭了 EditText 中的边框android:background="#00000000"

我在文件夹中创建了一个 xml 文件drawable,并在相关的线性布局中引用了这个文件,如下所示:android:background="@drawable/customxml"

4

3 回答 3

2

要获得所需的视觉外观,请包含一个包含文本视图和 EditView 的水平 LinearLayout。关闭 EditView 周围的边框(有一个属性可以做到这一点(我认为它是 android:shadowColor))玩弄边距和填充以使它们彼此相邻。在线性布局上设置背景颜色以在组合对周围放置边框。

我不会太担心效率。你没有嵌套很深。最大的挑战是让它看起来像一个单一的视图。

编辑:另一个想法。如果这不起作用,您可以将“To”设为可绘制对象,并使用 android:drawableLeft 属性进行设置。

于 2013-09-30T15:09:24.237 回答
2

您可以使用 Text Watcher 侦听器来做到这一点。您可以通过检查edittext 的长度将文本保留在edittext 中。

例如 editText.setText("To") // 表示长度为 2

并且在方法afterTextChanged中,检查editText中的文本是否已被删除(检查editText中的文本长度)

这是完整的示例代码:

    editText.setText("To");
    editText.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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.length < 2){
               editText.setText("To")//set editext with "To" again like has been initialized 
               editText.setSelection(editText.getText().length)// to make cursor in end of text
            }
        }
     });

希望这有帮助!快乐编码:)

于 2018-06-02T18:02:13.990 回答
-1

在具有水平方向的 LinearLayout 或具有 android:layout_toRightOf="@id/YourTextView" 的 RelativeLayout 中将 TextView 添加到 EditText 的右侧

于 2013-09-30T15:28:42.493 回答