【发布时间】:2012-11-24 16:55:48
【问题描述】:
我有一个扩展LinearLayout的类,里面有Buttons和一个Spinner。
此对象通过我的布局 XML 文件包含:
<com.ics.spinn.ComboBox android:id="@+id/myautocombo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:entries="@array/suppliers" />
/>
数组供应商在strings.xml中定义。
如果这个组件现在不是 com.ics.spinn.ComboBox,而是Spinner,Android 会
将“android:entries”自动填充到 Spinner 适配器。
我希望我的组件 com.ics.spinn.ComboBox 的行为方式相同: 能够访问通过 xml 文件定义的数组,所以我可以 通过以下方式将其提供给我的组件内的 Spinner:
ArrayAdapter<String> a = new ArrayAdapter<String>(this.getContext(),android.R.layout.simple_spinner_dropdown_item, ARRAYINSIDEMYXML);
s.setAdapter(a);
我现在可以通过 getResources().getStringArray(R.array.suppliers) 直接访问 strings.xml 中定义的数组
但我的代码不应该知道“供应商”这个名字,因为它应该通过 android:entries...
这 + João Melo 解决方案 WORK 中 xml 中的条目:
public ComboBox(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray b = context.obtainStyledAttributes(attrs,
R.styleable.ComboBox, 0, 0);
CharSequence[] entries = b.getTextArray(R.styleable.ComboBox_myEntries);
if (entries != null) {
ArrayAdapter<CharSequence> adapter =
new ArrayAdapter<CharSequence>(context,
android.R.layout.simple_spinner_item, entries);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
}
}
【问题讨论】:
-
您的 TypedArray 是在 res/values 文件夹内的 attrs.xml 文件中定义的。在下面检查我的答案。
标签: android xml arrays components