gpt4 book ai didi

android - WORKS : Android Custom Component - access Array in strings. xml,通过 layout.xml 提供

转载 作者:行者123 更新时间:2023-11-30 03:53:24 25 4
gpt4 key购买 nike

我有一个类,它扩展了 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);
}
}

最佳答案

我不知道是否可以使用 android:entries 属性来做到这一点,除非你的组件扩展了 Spinner,但我只是猜测。

您可以在 attrs.xml 中创建自己的自定义属性

<declare-styleable name="ComboBox">
<attr name="myEntries" format="reference"></attr>
</declare-styleable>

然后您可以在您的组件中访问此引用 (int) 并将 ArrayAdapter 设置到您的微调器中。

TypedArray customAttrs = context.obtainStyledAttributes(attrs, R.styleable.ComboBox);
for (int i = 0; i < customAttrs.length(); i++) {
int attrValue = customAttrs.getIndex(i);
switch (attrValue) {
case R.styleable.ComboBox_myEntries:
mArrayId = customAttrs.getResourceId(attrValue, 0);
ArrayAdapter<String> a = new ArrayAdapter<String>(this.getContext(),android.R.layout.simple_spinner_dropdown_item, mArrayId);
s.setAdapter(a);
break;
}
}

在您的布局上,在 xmlns:android="http://schemas.android.com/apk/res/android" 在 Root View 中:

然后您可以通过 xml 实例化您的组件和自定义属性:

<com.ics.spinn.ComboBox android:id="@+id/myautocombo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
app:myEntries="@array/suppliers" />
/>

不知道这个答案是否正是您正在寻找的,但它的行为就像 android:entries 一样。希望对您有所帮助。

关于android - WORKS : Android Custom Component - access Array in strings. xml,通过 layout.xml 提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com