gpt4 book ai didi

android - 使用 obtainStyledAttributes 获取多个样式属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:09:17 24 4
gpt4 key购买 nike

我正在尝试从我的代码中获取 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 数组中的任何位置。我不敢尝试 gravitytextColor 的位置首选项,但使用这种排列它们不起作用。

有人可以解释为什么获取属性的稳定行为吗?

最佳答案

这似乎是 API 中的错误。我对 4 个属性进行了测试:gravitytexttextSizetextColor。这是我使用的代码:

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/

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