2010-08-06 30 views
6

Tôi muốn sử dụng một làn da tùy chỉnh cho Datepickers và Timepickers của tôi. Thay đổi nền trong XML không thực hiện thủ thuật (nó thay đổi nền cho tập hợp, không phải từng nút của nó). API ngắn gọn và không có gì về ngoại hình (http://developer.android.com/reference/android/widget/DatePicker.html). Có thể sử dụng da tùy chỉnh cho các nút của Datepickers và Timepickers không?Bạn sử dụng giao diện Datepicker và Timepicker tùy chỉnh như thế nào?

Trả lời

4

Thật không may, trình đánh số là một tiện ích nội bộ. Cần ghi đè các hình nền này. Và không có cách nào chính thức để làm điều đó.

res/layout/number_picker.xml

<NumberPickerButton android:id="@+id/increment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/timepicker_up_btn" /> 

<EditText android:id="@+id/timepicker_input" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:singleLine="true" 
    style="?android:attr/textAppearanceLargeInverse" 
    android:textColor="@android:color/primary_text_light" 
    android:textSize="30sp" 
    android:background="@drawable/timepicker_input" /> 

<NumberPickerButton android:id="@+id/decrement" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/timepicker_down_btn" /> 

3

này là không an toàn, nhưng tôi tin rằng đó là để cách duy nhất để da một timepicker mà không cần sao chép toàn bộ lớp:

try { for (int i=0; i<2; i++) 
{ 
    ((ViewGroup) ((ViewGroup) mTimePicker.getChildAt(0)).getChildAt(i)).getChildAt(0).setBackgroundResource(R.drawable.timepicker_up_btn); 
    ((ViewGroup) ((ViewGroup) mTimePicker.getChildAt(0)).getChildAt(i)).getChildAt(1).setBackgroundResource(R.drawable.timepicker_input); 
    ((ViewGroup) ((ViewGroup) mTimePicker.getChildAt(0)).getChildAt(i)).getChildAt(2).setBackgroundResource(R.drawable.timepicker_down_btn); 
} 
} catch (Throwable t) {/* obviously no the view may look like garbage */} 

rõ ràng là bạn phải cung cấp các drawables được tham chiếu với ứng dụng của bạn

0
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/DateTimePicker" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:padding="5dip" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:baselineAligned="true" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:id="@+id/month_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/month_plus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_up" /> 

      <EditText 
       android:id="@+id/month_display" 
       android:layout_width="45dp" 
       android:layout_height="35dp" 
       android:background="@drawable/picker_middle" 
       android:focusable="false" 
       android:gravity="center" 
       android:singleLine="true" 
       android:textColor="#C0C0C0" > 
      </EditText> 

      <Button 
       android:id="@+id/month_minus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_down" /> 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/date_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/date_plus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_up" /> 

      <EditText 
       android:id="@+id/date_display" 
       android:layout_width="45dp" 
       android:layout_height="35dp" 
       android:background="@drawable/picker_middle" 
       android:gravity="center" 
       android:inputType="number" 
       android:singleLine="true" 
       android:textColor="#C0C0C0" /> 

      <Button 
       android:id="@+id/date_minus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_down" /> 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/year_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/year_plus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_up" /> 

      <EditText 
       android:id="@+id/year_display" 
       android:layout_width="45dp" 
       android:layout_height="35dp" 
       android:background="@drawable/picker_middle" 
       android:gravity="center" 
       android:inputType="number" 
       android:singleLine="true" 
       android:textColor="#C0C0C0" /> 

      <Button 
       android:id="@+id/year_minus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_down" /> 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/hour_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="5dp" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="5dp" 
      android:layout_marginTop="5dp" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/hour_plus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_up" /> 

      <EditText 
       android:id="@+id/hour_display" 
       android:layout_width="45dp" 
       android:layout_height="35dp" 
       android:background="@drawable/picker_middle" 
       android:gravity="center" 
       android:inputType="number" 
       android:singleLine="true" 
       android:textColor="#C0C0C0" > 
      </EditText> 

      <Button 
       android:id="@+id/hour_minus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_down" /> 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/min_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/min_plus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_up" /> 

      <EditText 
       android:id="@+id/min_display" 
       android:layout_width="45dp" 
       android:layout_height="35dp" 
       android:background="@drawable/picker_middle" 
       android:gravity="center" 
       android:inputType="number" 
       android:singleLine="true" 
       android:textColor="#C0C0C0" /> 

      <Button 
       android:id="@+id/min_minus" 
       android:layout_width="40dp" 
       android:layout_height="28dp" 
       android:background="@drawable/image_button_down" /> 
     </LinearLayout> 
    </LinearLayout> 

</RelativeLayout>`enter code here` 
2
package com.pointnormal; 

    import java.util.Calendar; 
    import android.content.Context; 
    import android.text.Editable; 
    import android.text.InputFilter; 
    import android.text.Spanned; 
    import android.text.TextWatcher; 
    import android.util.AttributeSet; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.RelativeLayout; 

    public class DateTimePicker extends RelativeLayout 
    { 
     private int startYear = 1900; 
     private int endYear = 2100; 

     private View myPickerView; 

     private Button month_plus; 
     private EditText month_display; 
     private Button month_minus; 

     private Button date_plus; 
     private EditText date_display; 
     private Button date_minus; 

     private Button year_plus; 
     private EditText year_display; 
     private Button year_minus; 

     private Button hour_plus; 
     private EditText hour_display; 
     private Button hour_minus; 

     private Button min_plus; 
     private EditText min_display; 
     private Button min_minus; 

     private Calendar cal; 
     // Constructor start 
     public DateTimePicker(Context context) 
     { 
      this(context, null); 

      init(context); 
     } 
     public DateTimePicker(Context context, AttributeSet attrs) 
     { 
      this(context, attrs, 0); 
     } 

     public DateTimePicker(Context context, AttributeSet attrs, int defStyle) 
     { 
      super(context, attrs, defStyle); 
      LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      myPickerView = inflator.inflate(R.layout.datetimepicker, null); 
      this.addView(myPickerView); 
      initializeReference(); 

     } 
     private void init(Context mContext) 
     { 
      LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      myPickerView = inflator.inflate(R.layout.datetimepicker, null); 
      this.addView(myPickerView); 
      initializeReference(); 
     } 
     private void initializeReference() 
     { 

      month_plus = (Button) myPickerView.findViewById(R.id.month_plus); 
      month_plus.setOnClickListener(month_plus_listener); 
      month_display = (EditText) myPickerView.findViewById(R.id.month_display); 
      month_minus = (Button) myPickerView.findViewById(R.id.month_minus); 
      month_minus.setOnClickListener(month_minus_listener); 

      date_plus = (Button) myPickerView.findViewById(R.id.date_plus); 
      date_plus.setOnClickListener(date_plus_listener); 
      date_display = (EditText) myPickerView.findViewById(R.id.date_display); 
      date_display.addTextChangedListener(date_watcher); 
      date_minus = (Button) myPickerView.findViewById(R.id.date_minus); 
      date_minus.setOnClickListener(date_minus_listener); 

      year_plus = (Button) myPickerView.findViewById(R.id.year_plus); 
      year_plus.setOnClickListener(year_plus_listener); 
      year_display = (EditText) myPickerView.findViewById(R.id.year_display); 
      year_display.setOnFocusChangeListener(mLostFocusYear); 
      year_display.addTextChangedListener(year_watcher); 
      year_minus = (Button) myPickerView.findViewById(R.id.year_minus); 
      year_minus.setOnClickListener(year_minus_listener); 


      hour_plus = (Button) myPickerView.findViewById(R.id.hour_plus); 
      hour_plus.setOnClickListener(hour_plus_listener); 
      hour_display = (EditText) myPickerView.findViewById(R.id.hour_display); 
      hour_display.addTextChangedListener(hour_watcher); 
      hour_minus = (Button) myPickerView.findViewById(R.id.hour_minus); 
      hour_minus.setOnClickListener(hour_minus_listener); 

      min_plus = (Button) myPickerView.findViewById(R.id.min_plus); 
      min_plus.setOnClickListener(min_plus_listener); 
      min_display = (EditText) myPickerView.findViewById(R.id.min_display); 
      min_display.addTextChangedListener(min_watcher); 
      min_minus = (Button) myPickerView.findViewById(R.id.min_minus); 
      min_minus.setOnClickListener(min_minus_listener); 

      initData(); 
      initFilterNumericDigit(); 

     } 
     public void initData() 
     { 
      cal = Calendar.getInstance(); 
      month_display.setText(months[cal.get(Calendar.MONTH)]); 
      date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
      year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
      hour_display.setText(String.valueOf(cal.get(Calendar.HOUR_OF_DAY))); 
      min_display.setText(String.valueOf(cal.get(Calendar.MINUTE))); 
     } 

     private void initFilterNumericDigit() 
     { 

      try { 
       date_display.setFilters(new InputFilter[] { new InputFilterMinMax(1, cal.getActualMaximum(Calendar.DAY_OF_MONTH)) }); 
       InputFilter[] filterArray_year = new InputFilter[1]; 
       filterArray_year[0] = new InputFilter.LengthFilter(4); 
       year_display.setFilters(filterArray_year); 
       hour_display.setFilters(new InputFilter[] { new InputFilterMinMax(0, 23) }); 
       min_display.setFilters(new InputFilter[] { new InputFilterMinMax(0, 59) }); 
      } 
      catch (Exception e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     private void changeFilter() 
     { 
      try { 

       date_display.setFilters(new InputFilter[] { new InputFilterMinMax(1, cal.getActualMaximum(Calendar.DAY_OF_MONTH)) }); 
      } 
      catch (Exception e) 
      { 
       date_display.setText("" + cal.get(Calendar.DAY_OF_MONTH)); 
       e.printStackTrace(); 
      } 
     } 
     public void setTimeChangedListener(TimeWatcher listener) 
     { 
      this.mTimeWatcher = listener; 
     } 

     public void removeTimeChangedListener() 
     { 
      this.mTimeWatcher = null; 
     } 

     View.OnClickListener hour_plus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       hour_display.requestFocus(); 

       try 
       { 
        cal.add(Calendar.HOUR_OF_DAY, 1); 
        sendToDisplay(); 
       } 
       catch (Exception e) 
       { 
        Log.e("", e.toString()); 

       } 
      } 
     }; 
     View.OnClickListener hour_minus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       hour_display.requestFocus(); 

       try 
       { 
        cal.add(Calendar.HOUR_OF_DAY, -1); 
        sendToDisplay(); 
       } 
       catch (Exception e) 
       { 
        Log.e("", e.toString()); 
       } 
      } 
     }; 

     View.OnClickListener min_plus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       min_display.requestFocus(); 

       try 
       { 
        cal.add(Calendar.MINUTE, 1); 
        sendToDisplay(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     View.OnClickListener min_minus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       min_display.requestFocus(); 

       try 
       { 
        cal.add(Calendar.MINUTE, -1); 
        sendToDisplay(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug","Sep", "Oct", "Nov", "Dec" }; 

     View.OnClickListener month_plus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       try 
       { 
        cal.add(Calendar.MONTH, 1); 

        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        changeFilter(); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        Log.e("", e.toString()); 
       } 
      } 
     }; 
     View.OnClickListener month_minus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       try 
       { 
        cal.add(Calendar.MONTH, -1); 
        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        changeFilter(); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        Log.e("", e.toString()); 
       } 
      } 
     }; 
     View.OnClickListener date_plus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       try 
       { 
        date_display.requestFocus(); 
        cal.add(Calendar.DAY_OF_MONTH, 1); 
        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }; 
     View.OnClickListener date_minus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       try { 
        date_display.requestFocus(); 
        cal.add(Calendar.DAY_OF_MONTH, -1); 
        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }; 
     View.OnClickListener year_plus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       try { 
        year_display.requestFocus(); 

        if (cal.get(Calendar.YEAR) >= endYear) 
        { 

         cal.set(Calendar.YEAR, startYear); 

        } 
        else 
        { 
         cal.add(Calendar.YEAR, +1); 

        } 

        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        changeFilter(); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }; 
     View.OnClickListener year_minus_listener = new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       try { 
        year_display.requestFocus(); 

        if (cal.get(Calendar.YEAR) <= startYear) { 
         cal.set(Calendar.YEAR, endYear); 

        } 
        else 
        { 
         cal.add(Calendar.YEAR, -1); 

        } 

        month_display.setText(months[cal.get(Calendar.MONTH)]); 
        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
        date_display.setText(String.valueOf(cal.get(Calendar.DAY_OF_MONTH))); 
        changeFilter(); 
        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }; 


     class InputFilterMinMax implements InputFilter 
     { 

      private int min, max; 
      public InputFilterMinMax(int min, int max) 
      { 
       this.min = min; 
       this.max = max; 
      } 

      public InputFilterMinMax(String min, String max) 
      { 
       this.min = Integer.parseInt(min); 
       this.max = Integer.parseInt(max); 
      } 

      @Override 
      public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) 
      { 
       try { 
        int input = Integer.parseInt(dest.toString()+ source.toString()); 
        if (isInRange(min, max, input)) 
        { 
         return null; 
        } 
       } 
       catch (NumberFormatException nfe) 
       { 
       } 
       return ""; 
      } 

      private boolean isInRange(int a, int b, int c) 
      { 
       return b > a ? c >= a && c <= b : c >= b && c <= a; 
      } 
     } 

     public void reset() 
     { 
      cal = Calendar.getInstance(); 
      initFilterNumericDigit(); 
      initData(); 
      sendToDisplay(); 
     } 

     synchronized private void sendToListener() 
     { 

      if (mTimeWatcher != null) 
      { 
        mTimeWatcher.onTimeChanged(cal.get(Calendar.HOUR_OF_DAY), 
          cal.get(Calendar.MINUTE), -1); 
      } 
      if (mDateWatcher != null) 
      { 
       mDateWatcher.onDateChanged(cal); 
      } 
     } 

     private void sendToDisplay() 
     { 

      hour_display.setText(String.valueOf(cal.get(Calendar.HOUR_OF_DAY))); 
      min_display.setText(String.valueOf(cal.get(Calendar.MINUTE))); 
     } 

     TimeWatcher mTimeWatcher = null; 

     public interface TimeWatcher 
     { 
      void onTimeChanged(int h, int m, int am_pm); 
     } 

     TextWatcher hour_watcher = new TextWatcher() 
     { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before,int count) 
      { 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) 
      { 

      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 
       try 
       { 
        if (s.toString().length() > 0) 
        { 
         cal.set(Calendar.HOUR_OF_DAY,Integer.parseInt(s.toString())); 
         sendToListener(); 
        } 

       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     TextWatcher min_watcher = new TextWatcher() 
     { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before,int count) 
      { 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) 
      { 

      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 
       try 
       { 
        if (s.toString().length() > 0) 
        { 
         cal.set(Calendar.MINUTE, Integer.parseInt(s.toString())); 
         sendToListener(); 
        } 

       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     public int getYear() 
     { 
      return Integer.parseInt(year_display.getText().toString()); 
     } 

     public int getDay() 
     { 
      return Integer.parseInt(date_display.getText().toString()); 
     } 

     public String getMonth() 
     { 
      return month_display.getText().toString(); 
     } 

     public int getHour() 
     { 
      return Integer.parseInt(hour_display.getText().toString()); 
     } 

     public int getMinute() 
     { 
      return Integer.parseInt(min_display.getText().toString()); 
     } 

     public void setDateChangedListener(DateWatcher listener) 
     { 
      this.mDateWatcher = listener; 
     } 

     public void removeDateChangedListener() 
     { 
      this.mDateWatcher = null; 
     } 


     View.OnFocusChangeListener mLostFocusYear = new OnFocusChangeListener() 
     { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) 
      { 
       if (!hasFocus) 
       { 

        year_display.setText(String.valueOf(cal.get(Calendar.YEAR))); 
       } 
      } 
     }; 



     TextWatcher date_watcher = new TextWatcher() 
     { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before,int count) 
      { 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) 
      { 

      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 

       try 
       { 
        if (s.toString().length() > 0) 
        { 
         // Log.e("", "afterTextChanged : " + s.toString()); 
         cal.set(Calendar.DAY_OF_MONTH,Integer.parseInt(s.toString())); 
         month_display.setText(months[cal.get(Calendar.MONTH)]); 
         sendToListener(); 
        } 
       } 
       catch (NumberFormatException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 

      } 
     }; 

     TextWatcher year_watcher = new TextWatcher() 
     { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before,int count) 
      { 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) 
      { 

      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 
       try 
       { 
        if (s.toString().length() == 4) 
        { 
         int year = Integer.parseInt(s.toString()); 

         if (year > endYear) 
         { 
          cal.set(Calendar.YEAR, endYear); 
         } 
         else if (year < startYear) 
         { 
          cal.set(Calendar.YEAR, startYear); 
         } 
         else 
         { 
          cal.set(Calendar.YEAR, year); 
         } 
        } 

        sendToListener(); 
       } 
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }; 

     DateWatcher mDateWatcher = null; 

     public interface DateWatcher 
     { 
      void onDateChanged(Calendar c); 
     } 

    } 

     public void button_click(View view) 
    { 
      // Create the dialog 
      final Dialog mDateTimeDialog = new Dialog(this); 
      // Inflate the root layout 

      final RelativeLayout mDateTimeDialogView = (RelativeLayout) getLayoutInflater().inflate(R.layout.date_time_dialog, null); 
      // Grab widget instance 
      final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker); 
      mDateTimePicker.setDateChangedListener(this); 

      // Update demo TextViews when the "OK" button is clicked 
      ((Button) mDateTimeDialogView.findViewById(R.id.SetDateTime)).setOnClickListener(new OnClickListener() { 

       public void onClick(View v) 
       { 
        mDateTimePicker.clearFocus(); 
        // TODO Auto-generated method stub 
        String result_string = mDateTimePicker.getMonth() + "/" + String.valueOf(mDateTimePicker.getDay()) + "/" + String.valueOf(mDateTimePicker.getYear())+ " " + String.valueOf(mDateTimePicker.getHour()) + ":" + String.valueOf(mDateTimePicker.getMinute()); 
//     if(mDateTimePicker.getHour() > 12) result_string = result_string + "PM"; 
//     else result_string = result_string + "AM"; 

        //if(result_string<) 
        edit_text.setText(result_string); 
        mDateTimeDialog.dismiss(); 
       } 
      }); 

      // Cancel the dialog when the "Cancel" button is clicked 
      ((Button) mDateTimeDialogView.findViewById(R.id.CancelDialog)).setOnClickListener(new OnClickListener() { 

       public void onClick(View v) 
       { 
        // TODO Auto-generated method stub 
        mDateTimeDialog.cancel(); 
       } 
      }); 

      // Reset Date and Time pickers when the "Reset" button is clicked 

      ((Button) mDateTimeDialogView.findViewById(R.id.ResetDateTime)).setOnClickListener(new OnClickListener() 
      { 

       public void onClick(View v) 
       { 
        // TODO Auto-generated method stub 
        mDateTimePicker.reset(); 
       } 
      }); 

      // Setup TimePicker 
      // No title on the dialog window 
      mDateTimeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      // Set the dialog content view 
      mDateTimeDialog.setContentView(mDateTimeDialogView); 
      // Display the dialog 
      mDateTimeDialog.show();    
     } 
    public void onDateChanged(Calendar c) 
    { 
      Log.e("","" + c.get(Calendar.MONTH) + " " + c.get(Calendar.DAY_OF_MONTH)+ " " + c.get(Calendar.YEAR)); 
    }`enter code here` 
Các vấn đề liên quan