これは API のバグのようです。gravity
、text
、textSize
およびの 4 つの属性についてテストを行いました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
ご覧のとおり、これは配列がソートされていることを期待しているかのようで、外れ値がいくつかあるだけです。obtainStyledAttributes
のドキュメントでは、属性 ID の順序を期待するように指定されていないため、これは Android API のバグだと思います。