2011-09-11 8 views
0

私はカスタムタイプフェイスフォントでデジタル時計ウィジェットを作成しようとしています。 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

+0

コードを投稿してください...おそらくあなたは何か小さいものを見逃しています... – mihail

+0

私は投稿を編集しました。今すぐコードが添付されます。 – rxlky

答えて

3

upper.duper.widget.circular.clock.CustomFont

を見て。これはサポートされていません。

+0

はい、あります。しかし、私はそれをどこに置くべきか分からない。 AndroidManifest.xmlにCustomFont.javaを登録しようとしましたが、それでもエラーが発生しました。 – rxlky

+0

@ハリム:AFAIKは、少なくともあなたが実装したように、不可能です。 – CommonsWare

+0

:(あまりにも貧しいですが、将来的には可能でしょうか?ビットマップとキャンバスに行きましょう... – rxlky

関連する問題