0

日付ピッカーから日フィールドを非表示にする必要があります。この方法を見つけましたが、問題は Android 2.3.3 のバージョンにあり、正常に動作しますが、バージョン 4x の Android では日フィールドが非表示になりません。ライブラリ「java.lang.reflect.Field」は廃止されたと思いますが、これについてはわかりません。

私はここでこの解決策を見つけました

ここで起こっているかもしれませんか?

final DatePicker datePicker = new DatePicker(this);                                     
                LLayout.addView(datePicker);

                hideDayField(datePicker, "mDayPicker");


    private void hideDayField(DatePicker datePicker, String name) {
    try {
        java.lang.reflect.Field field = DatePicker.class.getDeclaredField(name);
        field.setAccessible(true);
        View fieldInstance = (View) field.get(datePicker);
        fieldInstance.setVisibility(View.GONE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
4

2 に答える 2

2

あなたが取っているそのアプローチは、リフレクションを使用して、クラスのいくつかの非表示フィールドを台無しにしますDatePicker。これに関する問題は、クラスの内部が変更されると (たとえば、変更されるフィールドの名前)、これが機能しなくなることです。

リフレクションに関するドキュメントを参照してください。

リンクされた質問には、より適切なオプションがいくつか提供されています。

于 2013-02-06T15:09:15.373 に答える
1

日と月を非表示にする同様のことを行いましたが、ここで解決策を見つけました

try {
    java.lang.reflect.Field[] f = picker.getClass().getDeclaredFields();
    for (java.lang.reflect.Field field : f) {
        if (field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")
           || field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner")) {
           field.setAccessible(true);
           Object dmPicker = new Object();
           dmPicker = field.get(picker);
           ((View) dmPicker).setVisibility(View.GONE);
        }
    }
}

それが役に立てば幸い。

于 2013-07-20T01:17:02.530 に答える