这似乎是 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 的任何排序。