9

DatePickerDialogで1970年1月1日より前の日付を設定できないと報告しているメンバーがいます。この問題は私たちにとっては再現されません。

DatePickerDialogが基礎となるDatePickerのsetMinDate/setMaxDate関数を公開していないことはすでに知っているので、ある種の受話器メーカー固有の変更がminDate/maxDateに影響を与えているように思われます。

このユーザーは、2.2Froyoを実行しているVerizonでDroidx2を実行していると報告しています。彼のデバイスモデルの説明は正しいと思いますが、多くのユーザーがOSのバージョンについて混乱しているため、2.3を実行している可能性があります。

このテーマをアクティビティに追加して、この問題を解決しようとしました。

<style name="profile_editor_theme">     
    <item name="android:endYear">2025</item>
    <item name="android:startYear">1910</item>
</style>

私のアクティビティに関するこのテーマは、テストデバイス(Galaxyタブと元のMotorola Droid)でDatePickerDialogを制約するという意図された効果をもたらしましたが、ユーザーには効果がなかったようです。

この問題は、ユーザーには100%の確率で再現されますが、自分のデバイスでは正しく機能します。

これを引き起こしている可能性のあるものと、それを修正する方法を誰かが説明できますか?

私はこの件に関してGoogleに対してこのバグを提出しました。

ありがとう!

4

4 に答える 4

2

Android デバイスの開始日は 1970 年 1 月 1 日から始まります。Android は、1970 年 1 月 1 日から経過したミリ秒数として時間を計算します。

あなたのケースの一種のハックを見つけました。ここでは、動的に datePicker を作成します。

     DatePicker dp = new DatePicker(this);
     dp.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
     v.addView(dp);

マニフェスト ファイルで、アプリケーションのカスタム テーマを宣言します。アプリケーションにも同じテーマが必要です。ちなみに、アクティビティでも同じことができます。

 <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    android:theme="@style/CustomTheme">
    <activity
        android:name=".HelloDatePickerActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

styles.xml では、次のようにします。

<style name="CustomTheme" parent="android:Theme.Light">
    <item name="android:startYear">1890</item>
</style>

私の場合、デフォルトの開始日は 1900 です。したがって、このアプローチは機能します。

これがあなたを助けることを願っています!

于 2011-12-23T21:47:08.183 に答える
1

この質問は少し古いものであり、この回答は古いデバイスには当てはまらないことを認識していますが、最近、新しいデバイス ( Huawei Mediapad 7 Youth ) でこの問題を認識したので、更新することにしました。これと新しい情報:

API 11 以降、これを行うために必要なメソッドが公開されています。Calendar は Unix Epoch をゼロとして使用する場合がありますが、Java (少なくとも ~JRE 8 まで?) は符号付きの数値を使用するため、負数は完全に許容されます。ありがたいことに、このコードは正常に実行されるため、これを完全に認識する必要はありません。

// This is API 11!
try {
    // Hack to (try to) force minDate to 1888 instead of 1970.
    DatePicker dp = dialog.getDatePicker();
    Calendar minCal = Calendar.getInstance();
    minCal.set(1888, Calendar.JANUARY, 1, 0, 0, 0);
    dp.setMinDate(minCal.getTimeInMillis());

    if (maxDate > 0)
        dp.setMaxDate(maxDate);
} catch (NoSuchMethodError e) {
    Log.w(TAG, "Can't set min/max dates: device/Android version is too old.");
}

1888 を使用したのは、これが最小であることを示すレポートが、コードが実行され、無視/オーバーライドされていないことを明確にするためです。報告されたデバイスでこれが機能するかどうかについては、まだ連絡がありません。

于 2014-05-23T16:41:13.070 に答える
0

すでに同様のことを試しているようですが、次の設定を試しましたか。

android:startYear="1900"

DatePickerXMLで直接?

そのようです:

<DatePicker
          android:startYear="1900"
          android:endYear="2100"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
></DatePicker>

参照: http://kevsaidwhat.blogspot.com/2011/10/fun-with-android-datepicker-and-1970.html

于 2011-12-23T21:58:25.077 に答える