2012-01-03 50 views
6

我想添加新的按鈕,這是清除按鈕,日期選擇器部件和時間選擇器部件在我的android應用程序。在默認情況下,這些小部件有兩個按鈕,即設置和取消。我怎樣才能爲這兩個按鈕添加一個按鈕如何在android中的日期選擇器小部件中添加新按鈕?

這可能嗎?如果是的話,你可以舉一些例子嗎?

感謝

回答

4

這是我如何實現我的應用程序「清除」按鈕。當用戶點擊清除時,年/月/日值全部爲0.您可以在您的應用中使用onDateSet()來設置按鈕和清除按鈕。

我引用了Android源代碼(\ frameworks \ base \ core \ java \ android \ app \ DatePickerDialog.java)。

我也使用了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

感謝您對本代碼,但在ICS明確,並設置按鈕不起作用正確總是 – Jamshid 2013-01-09 08:57:41

6

只需創建此類!

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); 
    } 
} 

然後使用它來添加功能!

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(); 
    } 
}); 

貌似這個

enter image description here

享受:)

20

只需添加一箇中立的按鈕。

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

這應該是公認的答案 – SjoerdvGestel 2016-11-09 10:42:54

+0

其工作好的解決方案 – kondal 2017-03-28 06:57:56

0

問題也引用添加明確按鈕,一個TimePicker,這是什麼把我帶到這裏。

對於任何感興趣的人,下面是如何爲Dialog Fragment中的TimePicker執行此操作。

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(""); 
     } 
    } 
} 

然後,從活動加載它:

TimePickerFragment tpf = TimePickerFragment.newInstance(...args...); 
tpf.show(getFragmentManager(), "timePicker"); 
相關問題