即使用户输入文本,如何在编辑文本中添加文本?

时间:2014-07-22 18:46:49

标签: android android-edittext user-input

我已经编辑了要求用户提供日期的文本框。我想在编辑文本框中添加短划线,因此当用户输入日期时他们不会消失。它看起来像这样:

DD-MM-YYYY

因此,当用户输入日期的数字时,破折号会保留在那里。希望有人能为我解答这个问题。我是Android新手。

提前致谢。

3 个答案:

答案 0 :(得分:2)

要回答您的问题,您的TextChangedListener视图中需要EditText,您可以这样添加:

editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

在这三种方法中,您可以处理将破折号保持在适当位置的逻辑
从用户的角度(以及从开发人员的角度来看),这将是麻烦的,更不用说它违背了design guidelines。你有两个选择。您可以将editText视图拆分为三个单独的视图,使用TextViews渲染它们之间的破折号,或者使用设计指南中建议的解决方案DatePicker,如下所示:

DatePicker screenshot
当用户选择日期时,您可以编辑TextView以显示日期或您想要执行的任何操作。我在屏幕截图中使用的代码如下:
活动

    public class MainActivity extends ActionBarActivity {
        private TextView textView;
        private DatePicker datePicker;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            this.textView = (TextView) findViewById(R.id.textView1);
            this.datePicker = (DatePicker) findViewById(R.id.datePicker1);
            datePicker.init(2014, 4, 10, new OnDateChangedListener() {

                @Override
                public void onDateChanged(DatePicker view, int year, int monthOfYear,
                        int dayOfMonth) {
                    textView.setText(view.getDayOfMonth() + "-" + view.getMonth() + "-" + view.getYear());

                }
            });
        }


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.test.MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <DatePicker
        android:id="@+id/datePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:spinnersShown="false" />

</RelativeLayout>


请注意,我禁用了spinner,因为它占用了大量的水平空间。 如果您需要在视图中保存空间,也可以show the picker as a dialog。查看DatePicker的文档以获取更多信息。

答案 1 :(得分:0)

你尝试过这种方法吗?这应该将用户的输入与您的字符串或字符连接起来,而不是将其删除。

editText.setText(editText.getText() + "stuff you want to add");

虽然,老实说,在Android上你应该使用DatePicker来做这件事,绝对不是EditText。

答案 2 :(得分:0)

首先,您需要使用日期选择器来获取日期,

如果仍然如此,那么你需要:

EditText edit_datePicker =(EditText)findViewById(R.id.edit_pick); edit_datePicker.settext( “DD-MM-YYYY”); 现在,用户类型之后会出现什么。