我遇到了渲染问题,但还没弄清楚如何解决问题。我创建了一个自定义textview类,将视图设置为自定义字体。我相信我的设置是正确的,但由于某种原因自定义文本没有被应用,我在我的布局中接收使用此自定义textview小部件的渲染问题。这是我的设置。
自定义TextView类
public class FontedTextView extends TextView {
public FontedTextView(Context context) {
super(context);
}
public FontedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
CustomFontHelper.setCustomFont(this, context, attrs);
}
public FontedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
CustomFontHelper.setCustomFont(this, context, attrs);
}
}
Helper类设置字体
class CustomFontHelper {
public static void setCustomFont(TextView textview, Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFont);
String font = a.getString(R.styleable.CustomFont_font);
setCustomFont(textview, font, context);
a.recycle();
}
private static void setCustomFont(TextView textview, String font, Context context) {
if (font == null) {
return;
}
Typeface tf = FontCache.get(font, context);
if (tf != null) {
textview.setTypeface(tf);
}
}
}
我在布局
中使用了这样的textView <com.example.gui.FontedTextView
style="@style/CustomTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test new text typeface"
android:textColor="@color/black"
android:textSize="40sp" />
在styles.xml中,我添加了一个引用我的自定义字体的样式
<style name="CustomTextView" parent="@android:style/Widget.TextView">
<item name="com.example:font">fonts/UglyFont.otf</item>
</style>
我的attrs.xml看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomFont">
<attr name="font" format="string"/>
</declare-styleable>
</resources>
这是我在其他帖子中发现的问题,但我的具体情况似乎有点不同。我没有在我的样式中引用AppCompact,所以我不需要添加任何支持库或依赖项。特定于我创建的自定义textView存在冲突。这就是错误所说的内容。
无法实例化以下类:
- com.example.gui.FontedTextView(Open Class,Show Exception,Clear Cache)
提示:在自定义视图中使用View.isInEditMode()来跳过代码或显示 IDE异常详细信息中显示的示例数据 java.lang.NoClassDefFoundError:com / example / gui / CustomFontHelper 在com.example.gui.FontedButton。(FontedButton.java:19)at java.lang.reflect.Constructor.newInstance(Constructor.java:408)at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:835) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:811) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:811) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:811) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:811) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:811) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在android.view.LayoutInflater.inflate(LayoutInflater.java:515)at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
我尝试的事情但问题没有解决
- 使缓存无效并重新启动
- 重建/清洁
- 将SDK级别从23更改为21,20,19,18和17.没有任何区别