私はカスタムタイプフェイスフォントでデジタル時計ウィジェットを作成しようとしています。 Android Widgetのカスタムフォント
は私がのTextViewを拡張し、カスタムフォントの書体の新しい属性を置くことにより、だった hereソリューションから手がかりを得ました。キャンバスとビットマップソリューションを描画し、それをRemoteViewに渡すのに比べて、これは良い解決策です。
私はすべてのステップを追った、 1 CustomFont.java 2. attrs.xml 3のスタイルを定義するカスタムクラスを作成するには、その後、main.xml
にそれを置くが、私は次のエラー
を得ましたWARN/AppWidgetHostView(18681): updateAppWidget couldn't find any view, using error view
WARN/AppWidgetHostView(18681): android.view.InflateException: Binary XML file line #17: Error inflating class upper.duper.widget.circular.clock.CustomFont
...
...
...
WARN/AppWidgetHostView(18681): Caused by: java.lang.ClassNotFoundException: upper.duper.widget.circular.clock.CustomFont in loader dalvik.system.PathClassLoader
何か不足していますか?
ここで私はこれがCustomFont.java
package upper.duper.widget.circular.clock;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
public class CustomFont extends TextView {
private static final String TAG = "CustomFont";
public CustomFont(Context context) {
super(context);
}
public CustomFont(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public CustomFont(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.CustomFont);
String customFont = a.getString(R.styleable.CustomFont_customFont);
setCustomFont(ctx, customFont);
a.recycle();
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), asset);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface: "+e.getMessage());
return false;
}
setTypeface(tf);
return true;
}
}
であり、これは私のmain.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:updup="http://schemas.android.com/apk/res/upper.duper.widget.circular.clock"
android:background="#00000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<AnalogClock android:id="@+id/AnalogClock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dial="@drawable/widgetdial_white"
android:hand_hour="@drawable/widgethour"
android:hand_minute="@drawable/widgetminute"/>
<upper.duper.widget.circular.clock.CustomFont
android:id="@+id/TIME"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textStyle="bold"
android:layout_gravity="center"
android:singleLine="true"
android:ellipsize="none"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:padding="2dp"
updup:customFont="ALPNMAIN.TTF" />
であると私は資産フォルダに私のカスタムフォント(ALPNMAIN.TTF)を置くコード を添付既に。
これは、今、私はこのアプリのウィジェットのために何か「カスタム」を持つことは不可能であると感じattrs.xml
<resources>
<declare-styleable name="CustomFont">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
です。 アプリウィジェットのレイアウトにカスタムクラスを使用しようとしているように見えるhere
コードを投稿してください...おそらくあなたは何か小さいものを見逃しています... – mihail
私は投稿を編集しました。今すぐコードが添付されます。 – rxlky