Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在EditText中打开日期选择器单击第一次单击时不显示_Java_Android_Datepicker_Android Edittext - Fatal编程技术网

Java 在EditText中打开日期选择器单击第一次单击时不显示

Java 在EditText中打开日期选择器单击第一次单击时不显示,java,android,datepicker,android-edittext,Java,Android,Datepicker,Android Edittext,我正在努力打开一个日期选择器,同时单击一个编辑文本。它仅在第二次单击时打开日期选择器。我已经检查了以下选项,但没有任何效果。我在这里给出了我的XML代码,请给我一个解决这个问题的方法。我几乎是在尽最大努力 <---XML content---> <EditText android:id="@+id/p_date_edt" android:layout_width="match_parent" android:layout_height="wr

我正在努力打开一个
日期选择器
,同时单击一个
编辑文本
。它仅在第二次单击时打开日期选择器。我已经检查了以下选项,但没有任何效果。我在这里给出了我的XML代码,请给我一个解决这个问题的方法。我几乎是在尽最大努力

<---XML content--->
<EditText
      android:id="@+id/p_date_edt"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"                                
      android:layout_marginBottom="@dimen/margin_10dp"
      android:ems="8"
      android:hint="@string/dateTime"
      android:focusableInTouchMode="false" />

EditText
不监听
OnClickListener
,而是使用
OnTouchListener
,它会工作

pDateEdt.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {                
        datePicker();
        return false;
    }
});
或者,如果要使用
OnClickListener
,请使用以下方法:

<EditText
    android:text="@+id/EditText01"
    android:id="@+id/EditText01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="false" />

EditText
不监听
OnClickListener
,而是使用
OnTouchListener
,它会工作

pDateEdt.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {                
        datePicker();
        return false;
    }
});
或者,如果要使用
OnClickListener
,请使用以下方法:

<EditText
    android:text="@+id/EditText01"
    android:id="@+id/EditText01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="false" />

请使用
setOnTouchListener
而不是
setOnClickListener
。 请使用以下代码:

pDateEdt.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:

                         datePicker();

                        break;
                }

                return false;
            }
        });
请删除这行代码:

pDateEdt.setOnClickListener(this);

请使用
setOnTouchListener
而不是
setOnClickListener
。 请使用以下代码:

pDateEdt.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:

                         datePicker();

                        break;
                }

                return false;
            }
        });
请删除这行代码:

pDateEdt.setOnClickListener(this);

我看到很多程序员在您的应用程序中努力实现这一功能。 现在在您的场景中,当您第一次触摸Edittext时,Edittext将进入焦点模式,当您第二次触摸相同的Edittext时,只有onClick中的方法,即datePicker()将执行。 因此,您要做的就是删除
android:focusableInTouchMode=“false”
标记 只需添加标签
android:focusable=“false”
在java代码中,只需执行以下操作

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setOnClickListener(this);
@Override
public void onClick(View v) {
    datePicker();
}

我希望您的代码能够正常工作,并在您第一次触摸时打开日期选择器。

我看到很多程序员在您尝试实现此功能时都在努力。 现在在您的场景中,当您第一次触摸Edittext时,Edittext将进入焦点模式,当您第二次触摸相同的Edittext时,只有onClick中的方法,即datePicker()将执行。 因此,您要做的就是删除
android:focusableInTouchMode=“false”
标记 只需添加标签
android:focusable=“false”
在java代码中,只需执行以下操作

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setOnClickListener(this);
@Override
public void onClick(View v) {
    datePicker();
}

我希望您的代码可以正常工作,并在您第一次触摸时打开日期选择器。

试试这个,它将在单击edittext时工作。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DatePickerDialog mDatePickerDialog;
    private EditText edDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edDate = (EditText) findViewById(R.id.activity_ed_date);

        setDateTimeField();
        edDate.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mDatePickerDialog.show();
                return false;
            }
        });
    }

    private void setDateTimeField() {

        Calendar newCalendar = Calendar.getInstance();
        mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy");
                final Date startDate = newDate.getTime();
                String fdate = sd.format(startDate);

                edDate.setText(fdate);

            }
        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
        mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

    }
}
活动\u main.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.demoapp.MainActivity">

    <EditText
        android:id="@+id/activity_ed_date"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:focusable="false"
        android:hint="Date"
        android:imeOptions="actionNext"
        android:maxLength="30" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/colorPrimary" />

</android.support.constraint.ConstraintLayout>

试试这个,它将在单击edittext

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DatePickerDialog mDatePickerDialog;
    private EditText edDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edDate = (EditText) findViewById(R.id.activity_ed_date);

        setDateTimeField();
        edDate.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mDatePickerDialog.show();
                return false;
            }
        });
    }

    private void setDateTimeField() {

        Calendar newCalendar = Calendar.getInstance();
        mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy");
                final Date startDate = newDate.getTime();
                String fdate = sd.format(startDate);

                edDate.setText(fdate);

            }
        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
        mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

    }
}
活动\u main.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.demoapp.MainActivity">

    <EditText
        android:id="@+id/activity_ed_date"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:focusable="false"
        android:hint="Date"
        android:imeOptions="actionNext"
        android:maxLength="30" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/colorPrimary" />

</android.support.constraint.ConstraintLayout>

这是使用日期选择器最简单的方法。只需添加两个变量

private DatePickerDialog datePickerDialog;
EditText etJoiningDate;

etJoiningDate=(EditText)findViewById(R.id.etJoiningDate);

    etJoiningDate.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:

                    final Calendar cldr = Calendar.getInstance();
                    int day = cldr.get(Calendar.DAY_OF_MONTH);
                    int month = cldr.get(Calendar.MONTH);
                    int year = cldr.get(Calendar.YEAR);
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(TestActivity.this,
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                    etJoiningDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                                }
                            }, year, month, day);
                    datePickerDialog.show();

                    break;
            }


            return false;
        }


    });

这是使用日期选择器最简单的方法。只需添加两个变量

private DatePickerDialog datePickerDialog;
EditText etJoiningDate;

etJoiningDate=(EditText)findViewById(R.id.etJoiningDate);

    etJoiningDate.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:

                    final Calendar cldr = Calendar.getInstance();
                    int day = cldr.get(Calendar.DAY_OF_MONTH);
                    int month = cldr.get(Calendar.MONTH);
                    int year = cldr.get(Calendar.YEAR);
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(TestActivity.this,
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                    etJoiningDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                                }
                            }, year, month, day);
                    datePickerDialog.show();

                    break;
            }


            return false;
        }


    });

可能是解决此问题的最佳且最简单的方法:

在布局文件中,为EditText设置这些属性

android:clickable="true"
android:longClickable="false"
android:focusable="false"

可能是解决此问题的最佳且最简单的方法:

在布局文件中,为EditText设置这些属性

android:clickable="true"
android:longClickable="false"
android:focusable="false"

我也有同样的问题。虽然切换到onTouchListener会起作用,但正确的方法是使用按钮,并将其样式设置为editText。我也有同样的问题。虽然切换到onTouchListener会起作用,但正确的方法是使用按钮,并将其样式设置为editText。