1. 声明EditText变量,并关联到相应控件上

 private EditText sellStartTime;
private EditText sellEndTime;
 sellStartTime = (EditText)findViewById(R.id.editSellStartTime);
sellEndTime = (EditText)findViewById(R.id.editSellEndTime);

2. 日期选择器函数

 private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
String mm;
String dd;
if(monthOfYear<=9)
{
mMonth = monthOfYear+1;
mm="0"+mMonth;
}
else{
mMonth = monthOfYear+1;
mm=String.valueOf(mMonth);
}
if(dayOfMonth<=9)
{
mDay = dayOfMonth;
dd="0"+mDay;
}
else{
mDay = dayOfMonth;
dd=String.valueOf(mDay);
}
mDay = dayOfMonth;
if(timeFlag == 0) {
sellStartTime.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);
}else {
sellEndTime.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);
}
}
}; protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
return new DatePickerDialog(this,
mDateSetListener,
mYear, mMonth, mDay);
case 1:
return new DatePickerDialog(this,
mDateSetListener,
mYear, mMonth, mDay);
}
return null;
} // 隐藏手机键盘
private void hideIM(View edt){
try {
InputMethodManager im = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
IBinder windowToken = edt.getWindowToken();
if(windowToken != null) {
im.hideSoftInputFromWindow(windowToken, 0);
}
} catch (Exception e) { }
}

3. 注册监听器,当EditText获得焦点时,或者被点击时,打开日期选择器

                 sellStartTime.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
timeFlag = 0;
showDialog(0);
}
});
sellEndTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
timeFlag = 1;
showDialog(1);
}
});
sellStartTime.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus == true) {
timeFlag = 0;
hideIM(v);
showDialog(0);
}
}
}); sellEndTime.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus == true) {
timeFlag = 1;
hideIM(v);
showDialog(1);
}
}
});

4. 在包含EditText的LinearLayout中,添加语句

 android:focusable="true"  android:focusableInTouchMode="true"  

这句话,是为了防止EditText自动获取焦点,触发日期选择器。

EditText如何关闭软键盘

方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
例如:<activity android:name=".Main"
                  android:label="@string/app_name"
                  android:windowSoftInputMode="adjustUnspecified|stateHidden"
                  android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
方法二:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit); 
           InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

2.EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
       edit.setInputType(InputType.TYPE_NULL);

还有一个问题是怎样才能不让实体键盘也输入呢,解决方法

Android用代码实现EditText不可编辑

editText.setFilters(new InputFilter[] { new InputFilter() {

@Override

public CharSequence filter(CharSequence source, int start,

int end, Spanned dest, int dstart, int dend) {

return source.length() < 1 ? dest.subSequence(dstart, dend) : "";

}

}

}); 但是这样连DatePicker的设置也不能显示到EditText里了,改一改

//实现EditText不可编辑
  birthEdit.setFilters(new InputFilter[]{new InputFilter(){
   @Override
   public CharSequence filter(CharSequence source, int start, int end,
     Spanned dest, int dstart, int dend) {
    
    showDialog(HmConst.DIALOG_DATEPICKER);//不管按什么键都让DatePicker出现
    return source.length() == 1 ? "" : source;   //DatePicker的设置还是要让他显示滴
   }
   
  }});

我的实验代码,可行

protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.register);

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

makeDateEdit();

}

/**
  * 将EditText变成一个日期选择器
  */
 public void makeDateEdit(){
  //隐藏EditText键盘
  birthEdit.setInputType(InputType.TYPE_NULL);
  //点击显示DatePickerDialog
  birthEdit.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    showDialog(HmConst.DIALOG_DATEPICKER);
   }
  });
  
  //实现EditText不可编辑
  birthEdit.setFilters(new InputFilter[]{new InputFilter(){
   @Override
   public CharSequence filter(CharSequence source, int start, int end,
     Spanned dest, int dstart, int dend) {
    
    showDialog(HmConst.DIALOG_DATEPICKER);//不管按什么键都让DatePicker出现
    return source.length() == 1  ? "" : source;  
   }
   
  }});
  //屏蔽实体键盘delete键
  birthEdit.setOnKeyListener(new OnKeyListener(){
   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
     if(keyCode == KeyEvent.KEYCODE_DEL) { 
      showDialog(HmConst.DIALOG_DATEPICKER);//delete键都让DatePicker出现
               return true;//返回真就会屏蔽delete键的原效果
           } 
        return false;
   }
  });
  //设置时间选择器的监听器
  mDateSetListener =  new DatePickerDialog.OnDateSetListener() {   
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
              int dayOfMonth) {
             // TODO Auto-generated method stub
             
                    mYear = year;   
                    String mm;   
                    String dd;   
                    mMonth = monthOfYear+1; //因为month是从0开始计数的
                    if(mMonth<=9)   
                    {   
                        mm="0"+mMonth;   
                    }   
                    else{   
                        mm=String.valueOf(mMonth);   
                    }   
                    
                    mDay = dayOfMonth; 
                    if(mDay<=9)   
                    {   
                        dd="0"+mDay;   
                    }   
                    else{   
                        dd=String.valueOf(mDay);   
                        }   
                    mDay = dayOfMonth;   
                    //将选择的时间显示在EditText上
                    birthEdit.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);   
                       
                
            }             
        };   
 }
 
 
 
 @Override
 protected Dialog onCreateDialog(int id) {
  // TODO Auto-generated method stub
  switch(id){
  case HmConst.DIALOG_DATEPICKER:
   return new DatePickerDialog(this,mDateSetListener,2010,11,25);
  default:
   return null;
  }
 }

Android开发UI之EditText+DatePicker带日期选择器的编辑框的更多相关文章

  1. 安卓开发_浅谈DatePicker(日期选择器)

    DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年.月.日的日期数据并允许用户对其修改.如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker ...

  2. Android开发--UI之Bundle的使用

    Android开发–UI之Bundle的使用 最近,把之前学过的东西大体的整理了以下,并且想把学过的心得分享给大家.我自己做了一个小小的demo,以便说明具体的应用. 这里的两个界面是通过第一个界面输 ...

  3. Android开发 UI布局

    Android开发 UI布局一.线性布局LinearLayout 什么是线性布局? 其实呢,线性布局就是把所有的孩子摆在同一条线上 <?xml version="1.0" e ...

  4. Android开发UI之开源项目第一篇——个性化控件(View)篇

    原文:http://blog.csdn.net/java886o/article/details/24355907 本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍A ...

  5. Android开发之输入框EditText介绍

    这篇文章主要为大家详细介绍了Android布局之输入框EditText设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 现在先简单介绍一下技术点: 1.如何使用圆角输入框和按钮背景 2.如何实现 ...

  6. Android学习之Image操作及时间日期选择器

    一.基础学习 1.ImageView是图片容器,就相当于RadioGroup是RadioButton的容器一样,是View的直接子类. 1: <ImageView 2: android:id=& ...

  7. mpvue开发微信小程序之时间+日期选择器

    最近在做微信小程序,技术栈为mpvue+iview weapp组件库. 因项目需求,要用到日期+时间选择器,iview组件库目前还未提供时间日期选择器的组件,小程序官方组件日期时间也是分开的,在简书上 ...

  8. Android 开发之拦截EditText的输入内容,定制输入内容

    1.EditText作为一个比较成熟的View,在Android的应用开发中得到极为广泛的使用.在某些特殊情况下,我们可能需要定制EditText的输入内容, 只允许指定功能的输入,例如输入一个”dd ...

  9. Android开发UI之Toast的使用

    Toast,A toast provides simple feedback about an operation in a small popup. 对于操作提供一个简单反馈信息. 官网链接:htt ...

随机推荐

  1. 利用cglib生成动态java bean

    cglib详细学习 http://blog.csdn.net/u010150082/article/details/10901641 cglib-nodep jar报下载 http://grepcod ...

  2. DB2删除数据时的小技巧

    大家对如何删除数据都不陌生,我们习惯性的这么写: 其实这么写性能并不好,尤其是删除大量数据的时候,要想获得更好的性能,可以采用如下方式: 那如果要把一个表的所有数据都删除了,该怎么办?有人可能会说,这 ...

  3. hadoop filesystem 删除文件 复制文件 重命名文件

    private void moveFile(Configuration conf, String Path1, String Path2, String newname ) throws IOExce ...

  4. laravel方法汇总详解

    1.whereRaw() 用原生的SQL语句来查询,whereRaw('select * from user') 就和 User::all()方法是一样的效果 2.whereBetween() 查询时 ...

  5. 【Java】Linux下安装配置Oracle JDK 1.7版本

    1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本,要与Ubuntu兼容才行 下载地址 http://ww ...

  6. WPF中利用后台代码实现窗口分栏动态改变

    在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter. <Grid Backgrou ...

  7. 找不到 com.google.zxing.ResultMetadataType 异常解决

    在 https://github.com/zxing/zxing 下载二维码扫描 将 android 导入,code打成jar包运行时 报 06-14 23:43:08.690: E/AndroidR ...

  8. SQLite3中自增主键

    SQLite清空表并将自增列归零 SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容. 但SQLite不支持这个语句.在SQLite中直接使用 DELETE FROM TableNa ...

  9. BitSet

    前几天干了一件比较无聊的事儿——抄了一遍C++ STL bitset的源代码,把不懂的宏定义去掉了,发现(暂时)还能用,嘿嘿. #ifndef BITSET_H #define BITSET_H #i ...

  10. (转载)Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)

    在上篇文章中,我们介绍了VBO索引的使用,使用VBO索引可以有效地减少顶点个数,优化内存,提高程序效率. 本教程将带领大家一起走进3D–绘制一个立方体.其实画立方体本质上和画三角形没什么区别,所有的模 ...