2012-02-27 15 views
40

私の設定画面には、日付ピッカーウィジェットがあります。 Eclipseのデザイナーでは、私が望むように(D-M-Yでは3つのスピナー)表示されますが、私のデバイスでテストすると、左側にサイドスピナー、右側にカレンダーが表示されます。これまで(!)これを見たことはありませんでしたが、私は "CalendarView"を見ていると思ういくつかの研究をしています。DatePickerでCalendarViewをオフにする方法はありますか?

「calendarViewShown」プロパティをfalseに設定できるはずですが、XMLでエラーが発生します。私はAPIレベルを非難することを提案した別の質問を見つけました(私のminSDKLevelは7ですが、私は11をターゲットにしていますので、oldskoolメニューではなくアクションバーボタンを取得できます)。 だから、私はコードでそれを設定してみたいと思った:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion >= 11) 
     minDateSelector.setCalendarViewShown = false; 

しかし、再び、このfails- setCalendarViewShownが見つかりません。しかし、文書hereはそれが存在すべきだと言います。 アイデアは何ですか?

+0

は@SuppressLintを追加します( "NewApi")の警告を抑制し、SoloCrowdが提案したことを実行します。 – tobias

+0

minDateSelectorとは何ですか? – Jilberta

答えて

5

私はあなたと同じ問題を抱えていましたが、変更をXMLで行うことはできませんでした。あなたは正しい軌道に乗っている

のために、最後の行を変更してみてください:日付ピッカー

public void setCalendarViewShown (boolean shown) 

における方法は、あなたminSdkLevel = 7コンパイラがない場合、API 11で始まる存在

minDateSelector.setCalendarViewShown(false); 
+1

ありがとうございます - 別のUIオプションに変更しましたが、代わりにdatepickerを再訪問する可能性があります。 – James

32

これを有効なメソッドとして認識しません。このメソッドはandroid 2.3または2.2には存在しません。これを解決するには、リフレクションを使用するのが最善の方法です。このような何かが正常に動作するはずです:私は

import android.os.Build; 

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public void someThing() { 
    [...] 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     minDateSelector.setCalendarViewShown(false); 
    } 
} 

を使用するような場合に

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
if (currentapiVersion >= 11) { 
    try { 
    Method m = minDateSelector.getClass().getMethod("setCalendarViewShown", boolean.class); 
    m.invoke(minDateSelector, false); 
    } 
    catch (Exception e) {} // eat exception in our case 
} 
+3

常に最新のSDKをターゲットにする必要があります。これは、反射を使用する必要性を避けることです。 –

+0

私にとって完璧に良い。ありがとう!ユーザーが<11を使用している場合、彼は私のターゲットオーディエンスではありません。少なくとも私は彼/彼女をクラッシュから救う;) – datayeah

10

を私は読みやすさは、リフレクションを使用するよりも優れているとスタイルをキャッチし、例外を無視するよりも優れていると思います。もちろん、反射物も働いています。

+0

minDateSelectorとは何ですか? – Jilberta

+0

@ Jilbertaこれは[DatePicker'](http://developer.android.com/reference/android/widget/DatePicker.html)のインスタンスです。 –

92

あなたはAPIの新しいバージョンをターゲットにしている場合は、あなたがあなたの<DatePicker>で、次のXML(Javaコードを記述する必要はありません)を使用することができます。

android:calendarViewShown="false" 
+0

https://developer.android.com/reference/android/widget/DatePicker.html#attr_android:calendarViewShown - このドキュメントでは、「スピナー」モードにのみ適用されます。 – ihayet

+0

Javaコードを記述したい場合はどうしますか? – Michael

+0

@Michael Javaコードを記述する場合は 'setCalendarViewShown(booleanが表示されます) 'を使用することができます –

10

私はそれは、次のXML構成で働かせました。

android:datePickerMode="spinner" 
android:calendarViewShown="false" 

のみ、以下の設定は、私のために動作しませんでした:

android:calendarViewShown="false" 
関連する問題