0

この種のバグは黒魔術のようなものです:

https://github.com/SimonVT/android-timepickerを移植してHoloスタイルを完成させようとしています(デフォルトではICSタイムピッカーウィジェットのみがあり、ダイアログはHoneycombより前のままです)。

Timepickerの特別な属性を使用してTheme.Sherlockを拡張し、それをアプリケーション全体に適用しました。ダイアログはデフォルト(上記)と同じように見えます。その後、プロジェクトにHoloEverywhere libを追加しました...黒魔術が登場します!Timepickerウィジェットは、青い線やダイアログ内の位置の変更など、一部のビューを何らかの形で失いました。私はまだこのグリッチの理由について疑問に思っています。

注:私のプロジェクト(コード)とTimePicker libには、HoloEverywhereに関してまったく何もありません。

注:HoloEverywhereの属性と競合しているため、timepickerの一部の属性も変更しました(「...属性はすでに宣言されています」エラーのため)

コード:

public class DialogSample extends SherlockFragmentActivity implements OnTimeSetListener {

    private TextView mTimeDisplay;

    private int mHour;
    private int mMinute;

    static final int TIME_DIALOG_ID = 0;

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

        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);

        mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);

        findViewById(R.id.btnDialog).setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                DialogFragment newFragment = new TimePickerFragment();
                newFragment.show(getSupportFragmentManager(), "timePicker");    
            }
        });

        updateDisplay();
    }

    // updates the time we display in the TextView
    private void updateDisplay() {
        mTimeDisplay.setText(
                new StringBuilder()
                        .append(pad(mHour)).append(":")
                        .append(pad(mMinute)));
    }

    private static String pad(int c) {
        if (c >= 10) {
            return String.valueOf(c);
        } else {
            return "0" + String.valueOf(c);
        }
    }






    static public class TimePickerFragment extends SherlockDialogFragment {

        @Override
        public TimePickerDialog onCreateDialog(Bundle savedInstanceState) {
            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int hour = c.get(Calendar.HOUR_OF_DAY);
            int minute = c.get(Calendar.MINUTE);


            return new TimePickerDialog(getSherlockActivity(), (DialogSample)getSherlockActivity(), hour, minute, true);
        }

        public TimePickerFragment() {

        }

    }


    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
         mHour = hourOfDay;
         mMinute = minute;
         updateDisplay();

    }
}

https://github.com/SimonVT/android-timepicker

https://github.com/SimonVT/android-numberpicker

4

2 に答える 2

0

私が正しく理解していれば、ホロスタイルのタイムピッカーとナンバーピッカーが必要です。SimonVTを必要としないコンポーネントはどこでも使用できます

于 2013-01-15T20:57:05.740 に答える
0

解決策はトリッキーです:HoloEverywhereをに追加しました

1)NumberPicker lib 2)TimePicker lib 3)TimePickerダイアログlib 4)私のプロジェクトへ

しかし、解決策は問題と同じように不明確であるため、私はまだこれに満足していません

于 2013-01-17T15:48:04.583 に答える