2015-03-31 5 views
0

Я хочу показать DatePicker когда EditText получает focus:Как сделать виртуальную клавиатуру не показана, когда EditText получает фокус?

public class DatePickerUtil { 

    private Context ctxt; 
    private Calendar calendrier = Calendar.getInstance(); 
    private EditText chp; 
    private KeyListener keyListener; 
    private OnTouchListener touchListener; 
    private boolean canceled; 
    private DatePickerDialog picker; 

    public DatePickerUtil(Context context, EditText field) { 

     ctxt = context; 
     chp = field; 

     keyListener = new KeyListener() { 

      @Override 
      public int getInputType() { 
       // TODO Auto-generated method stub 
       return 0; 
      } 

      @Override 
      public boolean onKeyDown(View view, Editable text, int keyCode, 
        KeyEvent event) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public boolean onKeyUp(View view, Editable text, int keyCode, 
        KeyEvent event) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public boolean onKeyOther(View view, Editable text, KeyEvent event) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public void clearMetaKeyState(View view, Editable content, 
        int states) { 
       // TODO Auto-generated method stub 

      } 

     }; 

     touchListener = new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
        canceled = false; 
        show(); 
       } 
       return false; 
      } 

     }; 
    } 

    private void show() { 
     OnDateSetListener evt = new OnDateSetListener() { 
      @Override 
      public void onDateSet(DatePicker view, int annee, int mois, int jour) { 
       if (!canceled) { 
        calendrier.set(annee, mois, jour); 
        chp.setText(DateFormat.format("yyyy-MM-dd", calendrier)); 
       } 
      } 
     }; 
     picker = new DatePickerDialog(ctxt, evt, calendrier.get(Calendar.YEAR), 
                 calendrier.get(Calendar.MONTH), 
                 calendrier.get(Calendar.DAY_OF_MONTH)); 
     picker.setButton(DialogInterface.BUTTON_NEGATIVE, ctxt.getResources().getString(R.string.button_cancel), new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        canceled = true; 
        dialog.dismiss(); 
       } 
      }); 
     picker.show(); 
    } 

    public void attache() { 
     chp.setOnTouchListener(touchListener); 
     chp.setKeyListener(keyListener); 
    } 
} 

Во время выполнения фокус не внутри EditText, но только окружает поле:

enter image description here

Как вы можете увидеть пользователя не может редактировать содержимое EditText, поэтому virtualkeyboard не требуется. Проблема в том, что virtualkeyboard отображается, когда EditText получает focus! Итак, как сделать это не показано, когда EditText получает focus?

+0

ли вы попробовать с 'андроида: inputType = "дата"' в вашем XML? – NSimon

+0

Да, но у Android есть формат по умолчанию 'DD/MM/YYYY', хотя мой формат' YYYY-MM-DD' – pheromix

ответ

1

хорошо использовать этот метод

public void hideSoftKeyboard(Activity activity) { 
     InputMethodManager inputMethodManager = (InputMethodManager) activity 
       .getSystemService(Activity.INPUT_METHOD_SERVICE); 
     if (activity.getCurrentFocus() != null) 
      inputMethodManager.hideSoftInputFromWindow(activity 
        .getCurrentFocus().getWindowToken(), 0); 
    } 
+0

Вы можете поместить этот метод в класс, изменить его на статический и вызвать из любого места, где вам нужно скрыть кешборд –

0

Try This Программным

YourEditText=(EditText) findViewById(R.id.editText1); 
YourEditText.setInputType(InputType.TYPE_NULL); 
+0

нет, он не работает! – pheromix

0

Bascically вы можете перевести любую дату, используя что-то вроде:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
String date = format.format(Date.parse("Your date string")); 

Итак, то вы можете определить, когда пользователь выбирает дату, а также отображать версию, которую в работайте с.

Смотрите здесь больше: http://developer.android.com/reference/java/text/SimpleDateFormat.html

+0

Да, но это исправляет проблему с виртуальной клавиатурой? – pheromix

+0

Ну, это фактически не удалит клавиатуру, но вместо этого пользователь сможет ввести дату, которую вы сможете конвертировать в любой формат, который вам нужен/нужен – NSimon

0

Преобразование EditText в TextView и добавить OnClick слушателя для представления и показать диалог Datepicker для того же, как показано ниже:

private DatePickerDialog mDatePicker; 
    static final int DATE_PICKER_ID = 1111; 
private int mYear, mMonth, mDay, mHour, mMin; 
    mTvDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
final Calendar c = Calendar.getInstance(); 
     mYear = c.get(Calendar.YEAR); 
     mMonth = c.get(Calendar.MONTH); 
     mDay = c.get(Calendar.DAY_OF_MONTH); 
       showDialog(DATE_PICKER_ID); 

      } 
     }); 


@Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DATE_PICKER_ID: 
      mDatePicker = new DatePickerDialog(this, pickerListener, mYear, 
        mMonth, mDay); 
      mDatePicker.setTitle("Select Date"); 
      return mDatePicker; 

     } 
     return null; 
    } 

private DatePickerDialog.OnDateSetListener pickerListener = new DatePickerDialog.OnDateSetListener() { 

     // when dialog box is closed, below method will be called. 
     @SuppressLint("SimpleDateFormat") 
     @Override 
     public void onDateSet(DatePicker view, int selectedYear, 
       int selectedMonth, int selectedDay) { 
      mDay = selectedDay; 
      mMonth = selectedMonth; 
      mYear = selectedYear; 
      Calendar c = Calendar.getInstance(); 
      c.set(mYear, mMonth, mDay); 
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
      String selectedDate = df.format(c.getTime()); 
      mTvDate.setText(selectedDate); 
     } 
    }; 
0

Попробуйте это внутри EditText onclicklistener метод. Это заставит клавиатуру спрятаться.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
+0

он не работает! – pheromix

Смежные вопросы