我为NumberPicker创建了新的自定义窗口小部件,我希望在array.xml中按数组填充项目以执行此操作我在array.xml中创建新的定义:
<integer-array name="Items">
<item>1393</item>
<item>1394</item>
<item>1395</item>
<item>1396</item>
<item>1397</item>
</integer-array>
应用程序attr是:
<declare-styleable name="CNumberPicker">
<attr name="maxValue" format="reference" />
<attr name="minValue" format="string" />
<attr name="value" format="string" />
<attr name="displayedValues" format="string" />
<attr name="focusable" format="boolean" />
<attr name="focusableInTouchMode" format="boolean" />
</declare-styleable>
在布局xml中定义xustom小部件:
<com.sample.widget.CNumberPicker
android:id="@+id/np_choose_year"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.20"
android:gravity="center_horizontal"
app:maxValue="@array/Items"
app:minValue="0">
</com.sample.widget.CNumberPicker>
现在在自定义窗口小部件类中,我必须使用setMaxValue
为NumberPicker解析数组:
public class CNumberPicker extends net.simonvt.numberpicker.NumberPicker implements OnCheckedChangeListener {
private String maxValue;
private String minValue;
private String value;
public CNumberPicker(Context context) {
super(context);
//LayoutInflater.from(context).inflate(R.layout.dialog_schedule_date_time, this);
}
public CNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public CNumberPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CNumberPicker);
final int id = a.getResourceId(R.styleable.CNumberPicker_maxValue, 0);
/*final int[] values;
if (id != 0) {
values = getResources().getIntArray(id);
}
setMaxValue(Collections.max(Arrays.asList(values)));*/
setMaxValue(Integer.parseInt(a.getString(R.styleable.CNumberPicker_maxValue)));
setMinValue(Integer.parseInt(a.getString(R.styleable.CNumberPicker_minValue)));
setValue(Integer.parseInt(a.getString(R.styleable.CNumberPicker_value)));
a.recycle();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
setValue(19);
}
}
setMaxValue
只接受int而无法解析Array,如何解决这个问题?
答案 0 :(得分:0)
将Items
重新定义为字符串数组。
<string-array name="Items">
<item>1393</item>
<item>1394</item>
<item>1395</item>
<item>1396</item>
<item>1397</item>
</string-array>
并将您的代码更改为
final String[] values;
if (id != 0) {
values = getResources().getStringArray(id);
setDisplayedValues(values);
}