- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试从我的代码中获取 android
命名空间的几个样式属性。在此附上相关摘录。 AttributeSet attrs
是传递给任何自定义 TextView
的参数。
private static final int[] ATTRS = new int[] { android.R.attr.textSize,
android.R.attr.text, android.R.attr.textColor,
android.R.attr.gravity };
private void processAndroidAttributes(final Context context,
final AttributeSet attrs) {
final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
try {
final String text = a.getString(1);
myTextView.setText(text);
final float textSize = a.getDimensionPixelSize(0, DEFAULT_TEXT_SIZE);
myTextView.setTextSize(textSize);
}
我的问题是我想读取 int[]
ATTRS
中描述的 4 个属性。如您所见,我已将 textSize
作为该数组的第一个元素。原因很简单——如果我把它换成数组中的第二个位置,它的值就没有被正确读取(而是加载了提供的默认值)。另一方面,文本会正确加载到我放置的 ATTRS
数组中的任何位置。我不敢尝试 gravity
和 textColor
的位置首选项,但使用这种排列它们不起作用。
有人可以解释为什么获取属性的稳定行为吗?
最佳答案
这似乎是 API 中的错误。我对 4 个属性进行了测试:gravity
、text
、textSize
和 textColor
。这是我使用的代码:
private void processAndroidAttributes(final Context context, final AttributeSet attrs) {
ATTRS = new Integer[] {
android.R.attr.textSize, android.R.attr.text,
android.R.attr.textColor, android.R.attr.gravity };
Arrays.sort(ATTRS);
do {
printPermutation(ATTRS);
tryApplyingStyles(context, attrs, ATTRS);
ATTRS = nextPermutation(ATTRS);
} while ((ATTRS = nextPermutation(ATTRS)) != null);
}
processAndroidAttributes
方法尝试应用所有列出的属性并检查它们是否被应用或使用了默认值。对于每次迭代,我打印数组 ATTRS
内容,以及是否使用了实际值(标记为 1
)或使用了默认值(标记为 0
).这是我运行上面的代码后得到的结果(每次迭代打印几行):
[16842901,16842904,16842927,16843087]
1111
[16842901,16842904,16843087,16842927]
1110
[16842901,16842927,16842904,16843087]
1101
[16842901,16842927,16843087,16842904]
1101
[16842901,16843087,16842904,16842927]
1100
[16842901,16843087,16842927,16842904]
1100
[16842904,16842901,16842927,16843087]
1011
[16842904,16842901,16843087,16842927]
1010
[16842904,16842927,16842901,16843087]
1011
[16842904,16842927,16843087,16842901]
1011
[16842904,16843087,16842901,16842927]
1010
[16842904,16843087,16842927,16842901]
1010
[16842927,16842901,16842904,16843087]
1001
[16842927,16842901,16843087,16842904]
1001
[16842927,16842904,16842901,16843087]
1001
[16842927,16842904,16843087,16842901]
1001
[16842927,16843087,16842901,16842904]
1001
[16842927,16843087,16842904,16842901]
1001
[16843087,16842901,16842904,16842927]
1000
[16843087,16842901,16842927,16842904]
1000
[16843087,16842904,16842901,16842927]
1000
[16843087,16842904,16842927,16842901]
1000
[16843087,16842927,16842901,16842904]
1000
[16843087,16842927,16842904,16842901]
1000
如您所见,这几乎就像期望数组被排序一样,只有几个离群值。我认为这是 Android API 中的错误,如 obtainStyledAttributes
的文档, 未指定期望属性 ID 的任何排序。
关于android - 使用 obtainStyledAttributes 获取多个样式属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034597/
我正在尝试创建自己的键盘。使用 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。 我的理解是,它试图获
我是一名优秀的程序员,十分优秀!