实现单击EditText弹出日期选择框

一般情况下,单击编辑框会弹出键盘,但很多实际应用上需要避免弹出键盘,具体方法见链接:点击打开链接一般采用方法三。

监听编辑框控件,发现第一次并不会弹出时间选择器,需要再点击一次。为解决这个问题需要再添加一个OnFocuChangeListener监听事件。

Activity代码:

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Calendar;

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        Button btnDate = (Button) findViewById(R.id.btnDate);
        EditText ed=(EditText)findViewById(R.id.ed_time);
        btnDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
            }
        });
        //点击editveiw时,不弹出输入键盘
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);
        ed.setInputType(0);
        //监听编辑框,当按下时弹出时间对话框
        ed.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
            }
        });
        //判断焦点是否改变,第一次点击时响应,点击其他控件时焦点改变再次响应
        ed.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus) {//hasFocus为真时代表获取焦点,为假时代表失去焦点
                    onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
                }else{
                    Toast.makeText(MainActivity.this, "gone", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    protected Dialog onCreateDialog(){
        Calendar calendar = Calendar.getInstance();
        Dialog dialog = null;
                DatePickerDialog.OnDateSetListener dateListener =
                        new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker datePicker,
                                                  int year, int month, int dayOfMonth) {
                                EditText editText =
                                        (EditText) findViewById(R.id.editText);
                                //Calendar月份是从0开始,所以month要加1
                                editText.setText(  year + "-" +
                                        (month+1) + "-" + dayOfMonth );
                            }
                        };
                dialog = new DatePickerDialog(this,
                        dateListener,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH));
        return dialog;
    }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值