2012-01-03 23 views
6

私のアンドロイドアプリケーションの日付ピッカーウィジェットと時間ピッカーウィジェットに、クリアボタンである新しいボタンを追加したいと思います。デフォルトでは、これらのウィジェットには2つのボタン、設定、キャンセルがあります。これら2つのボタンにもう1つのボタンを追加するにはどうすればいいですか?アンドロイドの日付ピッカーウィジェットに新しいボタンを追加するにはどうすればよいですか?

可能でしょうか?はいの場合は、例を挙げてください。

おかげ

答えて

4

これは、私は私のアプリでは、「クリア」ボタンを実装する方法です。ユーザーがClearをクリックすると、年/月/日の値はすべて0になります。この方法では、SetボタンとClearボタンの両方のアプリケーションで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

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

は:)

20

ちょうどニュートラルボタンを追加お楽しみください。この

enter image description here

ように見えます。

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

+0

そのを次のようになります。そして、

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

、あなたの活動からそれを読み込みます良い解決策 – kondal

0

質問も私をここにもたらしたものですTimePickerに明確なボタンを追加参照しました。

関心のある人は、ダイアログピース内のTimePickerでこれを行う方法を説明します。

TimePickerFragment tpf = TimePickerFragment.newInstance(...args...); 
tpf.show(getFragmentManager(), "timePicker"); 
関連する問題