- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个自定义 DialogPreference,我使用 2 个名为 entries 和 entryValues 的字符串数组设置首选项,类似于 ListPreference 需要的内容。尽管在使用 AttributeSet 参数调用我的构造函数时两个数组似乎都存在,但尝试通过 obtainStyledAttributes 获取样式化数组失败并返回 null。
我做错了什么,我该如何解决?
我的自定义类代码是:
public class BackgroundPicker extends DialogPreference {
private CharSequence[] mEntries;
private CharSequence[] mEntryValues;
public BackgroundPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Print all values in attrs AttributeSet:
for (int i=0;i<attrs.getAttributeCount();i++) {
String name = attrs.getAttributeName(i);
Object value = attrs.getAttributeValue(i);
Log.d(TAG, name + " : " + value + " of type " + value.getClass().getSimpleName());
}
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ListPreference, 0, 0);
// getIndexCount returns zero !
for(int i=0; i<a.getIndexCount(); i++) {
TypedValue v = a.peekValue(i);
Log.d(TAG, "value[" + i + "] = " + v.toString());
}
// Both entries and entryValues are null.
mEntries = a.getTextArray(R.styleable.ListPreference_entries);
mEntryValues = a.getTextArray(R.styleable.ListPreference_entryValues);
}
}
我的调试打印是:
BackgroundPicker CTOR: IN
BackgroundPicker CTOR param attrs:
entries : @2131099650 of type String
title : @2131165247 of type String
key : BackgroundImage of type String
summary : @2131165248 of type String
defaultValue : back.png of type String
entryValues : @2131099651 of type String
BackgroundPicker CTOR param defStyle = 0
BackgroundPicker CTOR: OUT
我在 styles.xml 中的样式
<declare-styleable name="ListPreference">
<attr name="entries" format="reference" />
<attr name="entryValues" format="reference" />
</declare-styleable>
我在 arrays.xml 中的数据
<array name="Backgrounds">
<item>back.png</item>
<item>one.png</item>
</array>
和我的偏好设置:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/generaloptions" >
<BackgroundPicker
android:defaultValue="back.png"
android:entries="@+array/Backgrounds"
android:entryValues="@+array/Backgrounds"
android:key="BackgroundImage"
android:summary="@string/backgroundImageSummary"
android:title="@string/backgroundImage" />
</PreferenceCategory>
</PreferenceScreen>
最佳答案
带+号的值对我来说很奇怪,我从来没有在我的设置中使用过它们,也许这是不正确行为的主要原因。只需使用 android:entries="@array/Backgrounds"
而不使用 +
。
也尝试使用我的代码获取值,至少它适用于整数类型的属性,因此它应该也适用于其他类型:
TypedArray a = context.obtainStyledAttributes(attrs, new int[] { R.attr.entries, R.attr.entryValues });
mEntries = a.getTextArray(0); // because R.attr.entries has index 0 in the passed array
mEntryValues = a.getTextArray(1);
关于android - obtainStyledAttributes 无法找到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443630/
我正在尝试创建自己的键盘。使用 Android 键盘不足以完成我的任务,因此我决定直接从 View.class 创建继承类。作为基础,我决定使用 Keyboard.class 的代码,然后开始一项一项
我正在编写一个自定义 DialogPreference,我使用 2 个名为 entries 和 entryValues 的字符串数组设置首选项,类似于 ListPreference 需要的内容。尽管在
代码: public class CustomLayoutWithText extends LinearLayout { private Context context; privat
我正在尝试从我的代码中获取 android 命名空间的几个样式属性。在此附上相关摘录。 AttributeSet attrs 是传递给任何自定义 TextView 的参数。 private stati
尝试将自定义属性从父布局传递到子布局。 从 ObtainStyledAttributes() 返回的 TypedArray 似乎没有我创建的自定义属性的相应自定义值,尽管我可以将它们的 ID 映射到
我正在 Xamarin.Android 中构建自定义控件,作为该控件初始化的一部分,我想读取该控件的指定高度。 我想使用 ObtainStyledAttributes,因为它为我提供了一种将字符串维度
有什么区别 TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0);
我在 attrs.xml 中设置了名为 custom_values 的自定义属性,其中之一名为 stageNumber。我有一个定义了这个自定义值的按钮,例如custom:stageNumber="2
当我检查 FrameLayout 中的 QuickContactBadge 时,我发现了以下代码: public QuickContactBadge(Context context, Attribu
我刚刚看到一些教程代码示例,它们在 XML 中使用 declare-styleable 并在 Java 代码中使用 Context.obtainStyledAttributes。 我的理解是,它试图获
我是一名优秀的程序员,十分优秀!