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

  • maxman.tv

    maxman.tv

    29 EKİM 2013
  • tychoadragmire

    tychoadragmi

    20 Mart 2006
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009