EditText - 具有无法删除的默认文本,并在离开EditText后覆盖带背景的文本

时间:2013-09-30 14:39:21

标签: android android-edittext

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

Cannot delete From - is this possible?

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

To EditText框的当前代码:

<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。我使用android:background="#00000000"关闭了EditText中的边框。

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

3 个答案:

答案 0 :(得分:2)

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

我不担心效率。你没有深深地筑巢。最大的挑战是让它看起来像一个单一的视图。

编辑:另一个想法。如果这不起作用,你可以使“To”成为drawable,并使用android:drawableLeft属性设置它。

答案 1 :(得分:0)

您可以使用Text Watcher侦听器来执行此操作。 您可以通过检查edittext的长度来保留edittext中的文本。

例如 editText.setText(&#34; To&#34;)//意思是长度为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
            }
        }
     });

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

答案 2 :(得分:-1)

使用水平方向将LinearView添加到LinearLayout的EditText的右侧,或者使用android:layout_toRightOf =“@ id / YourTextView”

将RelativeLayout添加到RelativeLayout