我有一个类,它扩展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);
我现在可以通过直接访问 strings.xml 中定义的数组,getResources().getStringArray(R.array.suppliers)
但我的代码不应该知道名称“供应商”,因为它应该通过 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);
}
}