gpt4 book ai didi

自定义 View 中的 Android 属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:00 24 4
gpt4 key购买 nike

我有一个自定义的 android View 类,其中包括将大量文本直接绘制到提供给它的 onDraw 覆盖的 Canvas 中。

我想做的是有一个属性,可以将其设置为类似“?android:attr/textAppearanceLarge”的属性,并选择常规文本设置而无需进一步设置样式。

在我的自定义 View 的 attrs.xml 中,我有

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView" >
...

<attr name="textAppearance" format="reference" />

...
</declare-styleable>
</resources>

然后在 CustomView.java 中

final int[] bogus = new int[] { android.R.attr.textColor, android.R.attr.textSize, android.R.attr.typeface, android.R.attr.textStyle, android.R.attr.fontFamily };
final int ap = styledAttributes.getResourceId(com.test.R.styleable.MyView_textAppearance, -1);
final TypedArray textAppearance = ap != -1 ? context.obtainStyledAttributes(ap, bogus) : null;

if (textAppearance != null) {
for (int i = 0; i < textAppearance.getIndexCount(); i++) {
int attr = textAppearance.getIndex(i);

switch (attr) {
case android.R.attr.textColor: textColor = textAppearance.getColor(attr, textColor); break;
case android.R.attr.textSize: textSize = textAppearance.getDimensionPixelSize(attr, textSize); break;
case android.R.attr.typeface: typefaceIndex = textAppearance.getInt(attr, typefaceIndex); break;
case android.R.attr.textStyle: textStyle = textAppearance.getInt(attr, textStyle); break;
case android.R.attr.fontFamily: fontFamily = textAppearance.getString(attr); break;
}
}

textAppearance.recycle();
}

我已经尝试了 switch 变量、case 常量等的各种变体,但我从来没有得到任何有用的东西。

我在这里做错了什么?

最佳答案

我知道这是一个老问题,但只是偶然发现了这个问题,这个解决方案对我有用:

在 attrs.xml 中

<resources>
<declare-styleable name="CustomView">
....
<attr name="textAppearance" format="reference" />
</declare-styleable>
</resources>

在 CustomView.java 中

textAppearance = a.getResourceId(R.styleable.CustomView_textAppearance, -1);
TextViewCompat.setTextAppearance(textView, textAppearance);

然后在activity.xml中

<CustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:textAppearance="?android:attr/textAppearanceMedium"

关于自定义 View 中的 Android 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115512/

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