Возможно ли, что при нажатии кнопки edittext появится диалоговое сообщение?

Я хочу нажать кнопку edittext и показать дату диалога, чтобы попробовать

mDateDisplay = (EditText) findViewById(R.id.dateDisplay); mDateDisplay.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { showDialog(DATE_DIALOG_ID); } } }); 

В диалоговом окне будет показано, является ли mDateDisplay кнопкой

Но я хочу использовать edittext

что мне делать?

Solutions Collecting From Web of "Возможно ли, что при нажатии кнопки edittext появится диалоговое сообщение?"

Использовать это:

 mDateDisplay.setClickable(true); mDateDisplay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(DATE_DIALOG_ID); } }); 

Кроме того, вы можете использовать атрибут android:onClick в XML, чтобы указать на функцию обработки кликов в подклассе Activity.

Вы можете использовать событие OnClickListener для обработки диалогового окна, но после отключения android:focusableInTouchMode EditText в XML-файле, как это. Например – android:focusableInTouchMode="false" .

Потому что, когда EditText сначала касается, он вызывает событие фокуса, и при втором касании он вызывает событие click, поэтому сначала нужно отключить фокусное событие.

Для того же, что я использовал:

  sel_date.setClickable(true); sel_date.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub showDialog(DEFAULTDATESELECTOR_ID); } }); 

И для установки выбранной даты как значения EditText:

 private DateSlider.OnDateSetListener mDateSetListener = new DateSlider.OnDateSetListener() { public void onDateSet(DateSlider view, Calendar selectedDate) { // update the dateText view with the corresponding date sel_date.setText(String.format("%te-%tB-%tY", selectedDate, selectedDate, selectedDate).trim()); } }; 

Я редактировал код из Custom Date Picker в Android: http://blog.codeus.net/dateslider-1-0-an-alternative-datepicker-for-android/

Вы можете заменить Button с помощью EditText и сделать то же, что и код выше.

Клавиатура, кажется, появляется, когда EditText получает фокус. Чтобы предотвратить это, установите для параметра focusable значение false:

 <EditText ... android:focusable="false" ... /> 

отредактированный

Проверьте следующий код:

 public class Main extends Activity { EditText et1,et2; static final int DATE_DIALOG_ID = 0; static final int DATE_DIALOG_ID1 = 1; private int mYear; private int mMonth; private int mDay; private int mYear1; private int mMonth1; private int mDay1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et1=(EditText)findViewById(R.id.EditText01); et2=(EditText)findViewById(R.id.EditText02); final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); et1.setText("month/year"); et2.setText("month/year"); et1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub showDialog(DATE_DIALOG_ID); return false; } }); et2.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub showDialog(DATE_DIALOG_ID1); return false; } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); case DATE_DIALOG_ID1: return new DatePickerDialog(this, mDateSetListener1, mYear1, mMonth1, mDay1); } return null; } // updates the date in the TextView private void updateDisplay() { et1.setText(new StringBuilder() // Month is 0 based so add 1 .append(mMonth + 1).append("-").append(mYear)); } private void updateDisplay1() { et2.setText(new StringBuilder() // Month is 0 based so add 1 .append(mMonth1 + 1).append("-").append(mYear1)); } // the callback received when the user "sets" the date in the dialog private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // TODO Auto-generated method stub mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateDisplay(); } }; private DatePickerDialog.OnDateSetListener mDateSetListener1 = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year1, int monthOfYear1, int dayOfMonth1) { // TODO Auto-generated method stub mYear1 = year1; mMonth1 = monthOfYear1; mDay1 = dayOfMonth1; updateDisplay1(); } }; } 

Это идеальный код, который даст вам желаемый результат:

 public class TextView_Calendar extends Activity { EditText et1,et2; static final int DATE_DIALOG_ID = 0; private int mYear; private int mMonth; private int mDay; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et1=(EditText)findViewById(R.id.et1); final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); et1.setText("month/year"); et1.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { showDialog(DATE_DIALOG_ID); return false; } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); } return null; } // updates the date in the TextView private void updateDisplay() { et1.setText(new StringBuilder() // Month is 0 based so add 1 .append(mDay).append("-").append(mMonth + 1).append("-").append(mYear)); } // the callback received when the user "sets" the date in the dialog private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateDisplay(); } }; } 

Я столкнулся с подобной проблемой. Чтобы быть простым, чтобы решить это, я использовал следующий код:

 editText.setClickable(true); editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // showDialog } }); 

В XML:

 <EditText ... android:focusableInTouchMode="false" /> 

Таким образом, пользователь не смог отредактировать EditText, только щелкните его.

Я сделал это с onFocusChangeListener следующим образом:

MCompleteByEditText = (EditText) findViewById (R.id.completion); MCompleteByEditText .setOnFocusChangeListener (новый OnFocusChangeListener () {

  @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getSupportFragmentManager(), "timePicker"); } } }); 

Переменная hasFocus управляет тем, имеет ли текущий EditText фокус или нет.