2012-01-03 33 views
6

Tôi muốn thêm nút mới, đó là nút rõ ràng, cho đến tiện ích bộ chọn ngày và tiện ích trình chọn thời gian trong ứng dụng Android của tôi. Theo mặc định, các tiện ích này có hai nút, đặt và hủy. Làm cách nào tôi có thể thêm một nút nữa vào hai nút nàyLàm cách nào để thêm nút mới trong tiện ích bộ chọn ngày trong Android?

Có thể không? Nếu có, bạn có thể đưa ra một số ví dụ không?

Cảm ơn

Trả lời

4

Đây là cách tôi triển khai nút "Xóa" trong ứng dụng của mình. Khi người dùng nhấp vào Xóa, giá trị năm/tháng/ngày là tất cả 0. Bạn có thể sử dụng onDateSet() trong ứng dụng của mình cho cả nút Đặt và nút Xóa theo cách này.

Tôi đã tham chiếu mã nguồn Android (\ frameworks \ base \ core \ java \ android \ app \ DatePickerDialog.java).

Tôi cũng đã sử dụng trợ giúp của esilver.

public class DatePickerDialogPlus extends DatePickerDialog { 
    private final DatePicker mDatePicker; 
    private final OnDateSetListener mCallBack; 

    /** 
    * @param context The context the dialog is to run in. 
    * @param callBack How the parent is notified that the date is set. 
    * @param year The initial year of the dialog. 
    * @param monthOfYear The initial month of the dialog. 
    * @param dayOfMonth The initial day of the dialog. 
    */ 
    public DatePickerDialogPlus(Context context, OnDateSetListener callBack, 
      int year, int monthOfYear, int dayOfMonth) { 
     super(context, 0, callBack, year, monthOfYear, dayOfMonth); 

     mCallBack = callBack; 

     Context themeContext = getContext(); 
     setButton(BUTTON_POSITIVE, 
      themeContext.getText(R.string.datePicker_setButton), this); 
     setButton(BUTTON_NEUTRAL, 
      themeContext.getText(R.string.datePicker_clearButton), this); 
     setButton(BUTTON_NEGATIVE, 
      themeContext.getText(R.string.datePicker_cancelButton), null); 
     setIcon(0); 
     setTitle(R.string.datePicker_title); 

     LayoutInflater inflater = (LayoutInflater) 
      themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.date_picker_dialog, null); 
     setView(view); 
     mDatePicker = (DatePicker) view.findViewById(R.id.datePicker); 
     mDatePicker.init(year, monthOfYear, dayOfMonth, this); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (mCallBack != null) { 
      if (which == BUTTON_POSITIVE) { 
       mDatePicker.clearFocus(); 
       mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), 
        mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); 
      } else if (which == BUTTON_NEUTRAL) { 
       mDatePicker.clearFocus(); 
       mCallBack.onDateSet(mDatePicker, 0, 0, 0); 
      } 
     } 
    } 
} 
+0

cảm ơn bạn cho mã này, nhưng trong ICS nút rõ ràng và thiết lập không làm việc đúng luôn – Jamshid

6

Chỉ cần tạo lớp này!

import android.app.DatePickerDialog; 
import android.content.Context; 

public class DatePickerWithNeutral extends DatePickerDialog { 

    public DatePickerWithNeutral(Context context, OnDateSetListener callBack, 
          int year, int monthOfYear, int dayOfMonth) { 
     super(context, 0, callBack, year, monthOfYear, dayOfMonth); 

     setButton(BUTTON_POSITIVE, ("Ok"), this); 
     setButton(BUTTON_NEUTRAL, ("Something"), this); // ADD THIS 
     setButton(BUTTON_NEGATIVE, ("Cancel"), this); 
    } 
} 

Sau đó, sử dụng tính năng này để thêm chức năng!

date.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(
     new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Toast.makeText(getApplicationContext(), "Neutral Button Clicked!", 
      Toast.LENGTH_LONG).show(); 
    } 
}); 

Trông như thế này

enter image description here

Enjoy :)

20

Chỉ cần thêm một nút trung lập.

DatePickerDialog dialog = new DatePickerDialog(context, 0, callback, year, month, day); 
dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "Name", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     //Your code 
    } 
}); 
+4

này nên là câu trả lời chấp nhận nó – SjoerdvGestel

+0

giải pháp làm việc tốt – kondal

0

Câu hỏi cũng tham khảo thêm một nút rõ ràng đối với một TimePicker, đó là những gì mang lại cho tôi đây.

Đối với bất kỳ ai quan tâm, dưới đây là cách thực hiện nó cho một TimePicker trong một Phân đoạn hộp thoại.

import android.app.Dialog; 
import android.app.DialogFragment; 
import android.app.TimePickerDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.TimePicker; 

import java.util.Calendar; 

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener, TimePickerDialog.OnClickListener { 

    private static final String HOURS_ARG_KEY = "hours"; 
    private static final String MINUTES_ARG_KEY = "minutes"; 
    private static final String TARGET_ARG_KEY = "target"; 

    public static TimePickerFragment newInstance(int hours, int minutes, int targetResId,...other values...) { 
     TimePickerFragment tpf = new TimePickerFragment(); 
     Bundle args = new Bundle(); 

     //Setup the TimePickerFragment with some args if required. 

     args.putInt(HOURS_ARG_KEY, hours); 
     args.putInt(MINUTES_ARG_KEY, minutes); 
     args.putInt(TARGET_ARG_KEY, targetResId); 
     tpf.setArguments(args); 

     return tpf; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker if we get nothing from 
     // from the arguments. 
     final Calendar c = Calendar.getInstance(); 

     int hour = getArguments().getInt(HOURS_ARG_KEY,c.get(Calendar.HOUR_OF_DAY)); 
     int minute = getArguments().getInt(MINUTES_ARG_KEY, c.get(Calendar.MINUTE)); 

     // Create a new instance of TimePickerDialog and return it 
     TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, false); 

     // And add the third button to clear the target field. 
     tpd.setButton(DialogInterface.BUTTON_NEUTRAL,getActivity().getText(R.string.clear), this); 

     return tpd; 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 

     int target = getArguments().getInt(TARGET_ARG_KEY,0); 

     //Get reference of host activity (XML Layout File) TextView widget 
     TextView txt = (TextView) getActivity().findViewById(target); 
     //Format the hourOfDay and minute values, then display the user changed time on the TextView 
     txt.setText(...FORMATTED TIME...); 
    } 


    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if(which == DialogInterface.BUTTON_NEUTRAL) { 
      int target = getArguments().getInt(TARGET_ARG_KEY,0); 

      //Get reference of host activity (XML Layout File) TextView widget 
      TextView txt = (TextView) getActivity().findViewById(target); 
      //Clear the field. 
      txt.setText(""); 
     } 
    } 
} 

Sau đó, tải nó lên từ hoạt động của bạn:

TimePickerFragment tpf = TimePickerFragment.newInstance(...args...); 
tpf.show(getFragmentManager(), "timePicker"); 
Các vấn đề liên quan