java - 文本框聚焦时显示日期选择器

标签 java android datepicker

我刚刚进入 Android 应用程序,现在尝试使用一个允许用户在文本框中输入日期的界面。日期对话框仅应在文本框获得焦点时显示。从对话框中选择日期后,它将显示在文本框中。现在的问题是,即使文本框没有聚焦,也会显示日期对话框。有人可以帮我解决我的问题吗?谢谢。

TimeSheet.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1">


    <EditText
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:id="@+id/txtdate"
        android:layout_x="131dp"
        android:layout_y="192dp"
        android:hint="Touch here to select a date"/>

</AbsoluteLayout>

TimeSheet.java

package com.example.project.project;
import android.app.DatePickerDialog;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.view.View;
import android.os.Bundle;
import android.widget.Button;
import java.util.List;
import java.util.ArrayList;
import android.content.Context;
import android.content.ContentValues;
import android.widget.Toast;

import com.example.project.project.API.TimeSheetAPI;
import com.example.project.project.database.MyDatabaseHelper;



public class TimeSheet extends AppCompatActivity {

    private Spinner spinner,spinner2;
    private Button btnSaved;
    private MyDatabaseHelper dbHelper;
    private TimeSheetAPI ts;






    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timesheet);
        ts=new TimeSheetAPI(this);  
    }


    public void onStart()
    {
        super.onStart();
        EditText txtDate=(EditText)findViewById(R.id.txtdate);
        txtDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus)
            {
                if(hasFocus)
                {
                    DateDialog dialog=new DateDialog(v);
                    FragmentTransaction ft=getFragmentManager().beginTransaction();
                    dialog.show(ft,"DatePicker");
                }
            }

    });
    }

DateDialog.java

package com.example.project.project;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import java.util.Calendar;

/**
 * Created by tongws on 9/14/2015.
 */

@SuppressLint("ValidFragment")
public class DateDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    EditText txtdate;


   public DateDialog(View view)
    {
        txtdate=(EditText)view;
    }


    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        final Calendar c=Calendar.getInstance();
        int year=c.get(Calendar.YEAR);
        int month=c.get(Calendar.MONTH);
        int day=c.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(),this,year,month,day);
    }

    public void onDateSet(DatePicker view,int year, int month, int day)
    {
         String date=day+"-"+(month+1)+"-"+year;
        txtdate.setText(date);
    }
}

最佳答案

Activity 开始后,您的 EditText 已获得焦点。要清除 EditText 上的默认焦点,请将焦点添加到父布局。这可以通过将这行代码添加到您的父 View 中来完成。

android:focusableInTouchMode="true"

例如,

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1"
    android:focusableInTouchMode="true">

<EditText
    android:layout_width="190dp"
    android:layout_height="wrap_content"
    android:id="@+id/txtdate"
    android:layout_x="131dp"
    android:layout_y="192dp"
    android:hint="Touch here to select a date"/>

</AbsoluteLayout>

关于java - 文本框聚焦时显示日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32577302/

相关文章:

java - 没有 if 条件(动态查询)或乱码的Where子句中的PreparedStatement "is null"

java - 如何实际解析接收到的json数据

java - 如何在 TextView 中使用 ClickableSpans 并且仍然能够水平滚动?

android - Room 无法验证数据完整性

reactjs - 使用日期选择器选择日期时出错

java - 使用 "Assert in selenium"验证 Facebook 登录

java - 正则表达式引擎在没有另一次传递的情况下无法匹配所有出现的情况

Android GraphicBufferAlloc::createGraphicBuffer(w=1232, h=800) 失败(内存不足)

jQueryUI Datepicker 上一个和下一个图标不显示

javascript - 将日期发送到 JavaScript 中的操作