2

こんにちは、私はランチャーをすべてうまく機能させていますが、ランチャーにいくつかのオプションを追加したいのですが、ナンバーピッカーが必要なので、例としてトレビュシェットのソースを取り上げました

しかし、これにより1つのエラーが発生します。com.android.internal.Rをインポートできません
.com.android.rはプライベートですが、修正するためのパブリックAPIを知りません.

public class NumberPickerPreference extends DialogPreference {
   private int mMin, mMax, mDefault;

    private String mMaxExternalKey, mMinExternalKey;

    private NumberPicker mNumberPicker;

    public NumberPickerPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray dialogType = context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.DialogPreference, 0, 0);
        TypedArray numberPickerType = context.obtainStyledAttributes(attrs,
                R.styleable.NumberPickerPreference, 0, 0);

       mMaxExternalKey =      numberPickerType.getString(R.styleable.NumberPickerPreference_maxExternal);
        mMinExternalKey =   numberPickerType.getString(R.styleable.NumberPickerPreference_minExternal);

        mMax = numberPickerType.getInt(R.styleable.NumberPickerPreference_max, 5);
        mMin = numberPickerType.getInt(R.styleable.NumberPickerPreference_min, 0);

        mDefault =  dialogType.getInt(com.android.internal.R.styleable.Preference_defaultValue, mMin);

        dialogType.recycle();
        numberPickerType.recycle();
    }

    @Override
    protected View onCreateDialogView() {
        int max = mMax;
        int min = mMin;

        // External values
        if (mMaxExternalKey != null) {
            max = getSharedPreferences().getInt(mMaxExternalKey, mMax);
        }
        if (mMinExternalKey != null) {
            min = getSharedPreferences().getInt(mMinExternalKey, mMin);
         }

         LayoutInflater inflater =
                (LayoutInflater)     getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.number_picker_dialog, null);

       mNumberPicker = (NumberPicker) view.findViewById(R.id.number_picker);

       // Initialize state
       mNumberPicker.setMaxValue(max);
       mNumberPicker.setMinValue(min);
       mNumberPicker.setValue(getPersistedInt(mDefault));
       mNumberPicker.setWrapSelectorWheel(false);

    // No keyboard popup
        EditText textInput = (EditText)   NumberPicker.findViewById(com.android.internal.R.id.numberpicker_input);
        textInput.setCursorVisible(false);
        textInput.setFocusable(false);
        textInput.setFocusableInTouchMode(false);

         return view;
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (positiveResult) {
            persistInt(mNumberPicker.getValue());
        }
    }

}
4

1 に答える 1

5

試す

int id = Resources.getSystem().getIdentifier("numberpicker_input", "id", "android");

コンパイル時に com.android.internal.R の ID にアクセスすることはできませんが、実行時に内部リソースにアクセスして名前でリソースを取得できます。これは直接アクセスよりも遅く、Android の将来のバージョンで内部リソースが利用可能になるという保証はないことに注意してください。

于 2013-04-29T10:00:38.107 に答える