2014-08-30 101 views
6

我有兩個編輯文本字段的搜索活動。我喜歡編輯文本點擊日期選擇器對話框顯示。但是,當我點擊編輯文本時,首先顯示鍵盤,然後在第二次點擊日期選擇器對話框後顯示。有人能幫助我嗎?日期選擇器對話框顯示編輯文本雙擊

下面是活動代碼

package com.example.firstdemoapp.activities; 

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Locale; 

import com.example.firstdemoapp.R; 
import com.example.firstdemoapp.model.StatusDK; 

import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.Spinner; 

public class SearchingTaxActivity extends Activity implements OnClickListener, 
    DatePickerDialog.OnDateSetListener, OnItemSelectedListener { 

private Calendar calendarFrom; 
private Calendar calendarTo; 
private String myFormat; 
private SimpleDateFormat sdf; 
private EditText dateFrom; 
private EditText dateTo; 

private EditText activeEditText; 
private Calendar activeCalendar; 

private Spinner spinnerStatusDK; 
private ArrayAdapter spinnerArrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_search_tax); 

    calendarFrom = Calendar.getInstance(); 
    calendarTo = Calendar.getInstance(); 
    myFormat="dd/MM/yyyy"; 
    sdf = new SimpleDateFormat(myFormat, Locale.US); 

    dateFrom = (EditText) findViewById(R.id.dateFrom); 
    dateTo = (EditText) findViewById(R.id.dateTo); 
    spinnerStatusDK=(Spinner)findViewById(R.id.spinnerStatusDK); 
    spinnerArrayAdapter = new ArrayAdapter(this, 
       android.R.layout.simple_spinner_item, new StatusDK[] { 
        new StatusDK(0, "0"), 
        new StatusDK(1, "1"), 
        new StatusDK(2, "2"), 
        }); 

    spinnerStatusDK.setAdapter(spinnerArrayAdapter); 
    spinnerStatusDK.setOnItemSelectedListener(this); 
    dateFrom.setOnClickListener(this); 
    dateTo.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if (v == dateFrom) { 
     activeCalendar = calendarFrom; 
     activeEditText = dateFrom; 
    } else if (v == dateTo) { 
     activeCalendar = calendarTo; 
     activeEditText = dateTo; 
    } 
    new DatePickerDialog(SearchingTaxActivity.this, this, 
      activeCalendar.get(Calendar.YEAR), 
      activeCalendar.get(Calendar.MONTH), 
      activeCalendar.get(Calendar.DAY_OF_MONTH)).show(); 



} 

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, 
     int dayOfMonth) { 
    // TODO Auto-generated method stub 
    activeCalendar.set(Calendar.YEAR, year); 
    activeCalendar.set(Calendar.MONTH, monthOfYear); 
    activeCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 

    if (activeEditText != null) { 
     activeEditText.setText(sdf.format(activeCalendar.getTime())); 
    } 

} 

@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

}

和該活動的佈局是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context="${relativePackage}.${activityClass}" > 

<TextView android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/dateFromTextView" 
      /> 
<EditText 
    android:id="@+id/dateFrom" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:hint="@string/edit_datefrom" 
    /> 

<TextView android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/dateToTextView" 
      /> 
<EditText 
    android:id="@+id/dateTo" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:hint="@string/edit_dateto" 
    /> 

<Spinner 
    android:id="@+id/spinnerStatusDK" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

回答

30

我爲xml文件中的編輯文本添加了android:focusableInTouchMode =「false」,這對我有所幫助。因爲第一個焦點事件被觸發,然後單擊事件被觸發。

0

,你可以嘗試隱藏使用

InputMethodManager類鍵盤
private void hideKeyboard(EditText et) { 
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
} 
+0

我的問題是我不喜歡在編輯文本單擊兩次來顯示日期選擇器對話框 – vikifor 2014-08-30 20:49:37

+0

這是可能的通過EditText上的第一個單擊事件調用日期選擇器對話框。 – user3806621 2014-08-30 21:00:09

0

這是它是開放的任何DatePicker & TimePickerEditText對話框非常有用的最佳解決方案,

editdate.setFocusable(false); 
editdate.setKeyListener(null);