19

日付ピッカーダイアログを開くAndroidスピナーを作成するにはどうすればよいですか?

下のスクリーンショットに示すように、カレンダーアプリのスピナーのようなスピナーが必要です。

目的のGUI要素が強調表示されたAndroidカレンダーアプリのスクリーンショット

私がすでに試したこと:

レイアウトXMLでスピナーを作成し、ダイアログを表示するメソッドを呼び出すようにonclick属性を設定しようとしました。「クリック時」にメソッド名を入力すると、「次のクラスが見つかりませんでした:-スピナー(android.widget.Spinnerに変更、ビルドパスを修正、XMLを編集)」というエラーが表示されます。

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="showDatePickerDialog" />

showDatePickerDialogは適切なクラスにあります:

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getFragmentManager(), "Date");
}

そしてこれはDatePickerFragment(別のWebサイトからコピー)です:

import java.util.Calendar;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.widget.DatePicker;

public class DatePickerFragment extends DialogFragment
                        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

解決:

私は別の質問で解決策を見つけました。

レイアウトファイルで通常のスピナーを使用し、次にアクティビティクラスで次のコードを使用しました。

dateSpinner = (Spinner)findViewById(R.id.spinner_date);

View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            showDatePickerDialog(v);
        }
        return true;
    }
};

View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            showDatePickerDialog(v);
            return true;
        }
        else {
            return false;
        }
    }
};

dateSpinner.setOnTouchListener(Spinner_OnTouch);
dateSpinner.setOnKeyListener(Spinner_OnKey);

少しハッキングされているようですが、機能します。誰かがそれを行うためのよりクリーンな方法を知っていますか?スピナーでsetOnClickListener()またはsetOnItemClickListener()を実行できませんでした。

4

3 に答える 3

13

とても簡単に達成できました。カレンダーアプリとまったく同じように見えます:)

TextViewを使用して、スピナースタイルを設定します。

<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   style="@android:style/Widget.Holo.Spinner" />

HoloテーマのないAPI10以下の場合は、次を使用します。

style="@android:style/Widget.Spinner"
于 2013-05-30T16:18:29.073 に答える
12

一般に、この場合に人々が行うことは、ボタンを使用してスピナーのようにスタイルを設定することだと思います(ここでのアプローチ、私はより良いアプローチだと思います。ほとんどの場合、スタイルをに設定するだけです android.R.attr.spinnerStyle)、またはスピナーを使用しますが、クリックアクションをオーバーロードしますダイアログを作成します。

もちろん、難しいのは、月/日/年のスピンを含むカスタムダイアログを作成することです(スピナーではありません...スロットマシンなどのようなものです)。

あなたがそれについて行くことができるいくつかの方法があります、ここにいくつかのグーグルドキュメントがあります、そしてあなたはいつでもアンドロイドソースコードを持ち上げることができます(明らかに欠点がありますが)。

于 2012-09-17T19:09:11.837 に答える
2

ボタンが最善の方法です。ボタンのスタイルを変更するだけです。デフォルトのAndroidスピナースタイルをボタンに設定しようとしましたが、正しく機能しません。だから私は自分のスタイルを作りました(これはデフォルトのスピナースタイルのコピーです)。ここにあります:

    `<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="false"
              android:drawable="@drawable/spinner_disabled_holo_light" />
        <item android:state_pressed="true"
              android:drawable="@drawable/spinner_pressed_holo_light" />
        <item android:state_pressed="false" android:state_focused="true"
              android:drawable="@drawable/spinner_focused_holo_light" />
        <item android:drawable="@drawable/spinner_default_holo_light" />
    </selector>

`

.. \ sdk \ platform \ android-%% \ data \ res\drawableにある画像。

これは私にとってはうまくいきます。これは、Googleカレンダーのスピナーのように、ボタンスピナースタイルを作成する簡単な方法です。

于 2012-12-30T23:16:32.160 に答える