簡體   English   中英

Android小部件上的自定義字體

[英]Custom Font on a Android Widget

我正在嘗試使用自定義字體創建數字時鍾小部件。

我從這里得到線索

解決方案是通過擴展TextView並為自定義字體字體添加新屬性。 與繪制Canvas和Bitmap解決方案並將其傳遞給RemoteViews相比,這是一個很好的解決方案。

我遵循了每個步驟,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>

現在,我感覺這不可能為應用程序小部件提供一些“自定義”功能。 這里

upper.duper.widget.circular.clock.CustomFont

您似乎正在嘗試在應用小部件的布局中使用自定義類。 不支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM