SORU
4 Mart 2010, PERŞEMBE


Özel yazı tipleri ve XML düzenleri (Android)

GUI bir düzen Android XML dosyalarını kullanarak tanımlamak için çalışıyorum. Bildiğim kadarıyla bulacağım, hiçbir şekilde belirttiğiniz araçlarınızı kullanmanız gerekir özel bir yazı tipi (örneğin bir ettin yerleştirilen varlıklar/font/) XML dosyaları ve tek kullanım sistemi yüklü yazı tipleri.

Java kodunda, her widget elle benzersiz Kimliği kullanarak yazı tipini değiştirebileceğimi biliyorum. Alternatif olarak, Java tüm Aletler bu değişikliği yapmak için ispat edebilirim, ama bu muhtemelen çok yavaş olur.

Diğer seçeneklerim ne? Daha özel bir görünüme sahip bu widget yapmak için yollar var mı? Özellikle el ile ekliyorum her yeni widget için yazı tipini değiştirmek zorunda kalmak istemiyorum.

CEVAP
25 AĞUSTOS 2011, PERŞEMBE


Özel yazı tiplerini öğrendim here ayarlamak için TextView genişletebilirsiniz.

TextViewPlus.java:

package com.example;

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 TextViewPlus extends TextView {
    private static final String TAG = "TextView";

    public TextViewPlus(Context context) {
        super(context);
    }

    public TextViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        setCustomFont(context, attrs);
    }

    public TextViewPlus(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.TextViewPlus);
        String customFont = a.getString(R.styleable.TextViewPlus_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;
    }

}

attrs.xml:(değerler/res)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="TextViewPlus">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources>

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:foo="http://schemas.android.com/apk/res/com.example"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.example.TextViewPlus
        android:id="@ id/textViewPlus1"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:text="@string/showingOffTheNewTypeface"
        foo:customFont="saxmono.ttf">
    </com.example.TextViewPlus>
</LinearLayout>

"Saxmono.koyabilirsiniz ttf"varlıklarklasör.

GÜNCELLEME 8/1/13

Bu yöntem ile ciddi bellek sorunları vardır. Aşağıda chedabob's comment bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • PlayStation

    PlayStation

    16 Aralık 2005