public api com.android.internal.r Android numberpicker

时间:2012-12-14 15:59:21

标签: android launcher

我在那里制作一个发射器 一切都很好 但我想为启动器添加一些选项,我需要一个数字选择器 所以我把投石机的来源作为例子

但这给了我一个错误 我无法导入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());
        }
    }

}

1 个答案:

答案 0 :(得分:5)

尝试

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

您无法在编译时访问com.android.internal.R的id,但您可以在运行时访问内部资源并按名称获取资源。 您应该知道这比直接访问慢,并且无法保证在未来的android版本中可以使用内部资源。