2015-03-31 151 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是没有必要的。问题是当EditText得到focus时显示virtualkeyboard!那么如何在EditText得到focus时不显示?

+0

你有没有试着用'安卓的inputType = “日期”'在XML? – NSimon 2015-03-31 09:13:37

+0

是的,但Android的默认格式为“DD/MM/YYYY”,尽管我的格式为“YYYY-MM-DD” – pheromix 2015-03-31 09:24:51

回答

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

你可以把这个方法放在一个类中,把它改成静态的,并且可以从任何需要隐藏屏幕的地方调用 – 2015-03-31 12:49:18

0

尝试这个编程

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

不,它不起作用! – pheromix 2015-03-31 09:39:22

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 2015-03-31 09:33:29

+0

那么它不会真的删除键盘,但用户将能够输入一个日期,你可以将其转换为任何你想要的格式 – NSimon 2015-03-31 09:48:49

0

将您EDITTEXT到的TextView和添加的onclick侦听器视图,并显示出相同的像下面的日期选择器对话框:

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 2015-03-31 11:12:25