0

ここでは Java/Android 初心者です。アプリケーションでカスタム フォントを使用していますsetTypeface()が、テキストごとにステートメントを作成すると、コードの品質が低下します。

現在のコード:

Typeface Helvetica = Typeface.createFromAsset(getAssets(), "fonts/Helvetica.otf");

final TextView Nike = (TextView)findViewById(R.id.Nike);
final TextView Puma = (TextView)findViewById(R.id.Puma);
final TextView Adidas = (TextView)findViewById(R.id.Adidas);
final TextView Reebok = (TextView)findViewById(R.id.Reebok);
final TextView Umbro = (TextView)findViewById(R.id.Umbro);

Nike.setTypeface(Helvetica);
Puma.setTypeface(Helvetica);
Adidas.setTypeface(Helvetica);
Reebok.setTypeface(Helvetica);
Umbro.setTypeface(Helvetica);

このコードを短くするにはどうすればよいですか? 配列を使用した foreach ループを考えていますが、理解できないようです。このようなことが可能でしょうか:

String[] HelveticaTextArray = {"Nike", "Puma", "Adidas", "Reebok", "Umbro"};

for ( String[] HelveticaTextArray : item ) {
    final TextView HelveticaText = (TextView).findViewById(R.id.item);
    HelveticaText.setTypeface(Helvetica);
};
4

4 に答える 4

2

それぞれに対して同じことをしているので、 and フォントTextViewを渡して、必要なことを行う便利なメソッドを作成したいと思います。R.id.xxx例えば、

private void initializeViews() {
    Typeface Helvetica = Typeface.createFromAsset(getAssets(), "fonts/Helvetica.otf");

    final TextView Nike = initializeTextView(R.id.Nike, Helvetica);
    final TextView Puma = initializeTextView(R.id.Puma, Helvetica);
    final TextView Adidas = initializeTextView(R.id.Adidas, Helvetica);
    final TextView Reebok = initializeTextView(R.id.Reebok, Helvetica);
    final TextView Umbro = initializeTextView(R.id.Umbro, Helvetica);

}

private TextView initializeTextView(int textViewId, Typeface typeface) {
    TextView textView = (TextView)findViewById(textViewId);
    if (textView != null)
        textView.setTypeface(typeface);
    else
        Log.e(TAG, "some error message");
    return textView;
}
于 2012-11-09T02:02:11.747 に答える
1

文字列の代わりに int ID を格納できます。

//String[] HelveticaTextArray = {"Nike", "Puma", "Adidas", "Reebok", "Umbro"};
int[] HelveticaTextArray = {R.id.Nike, R.id.Puma, R.id.Adidas, R.id.Reebok, R.id.Umbro}


for ( int[] HelveticaTextArray : item ) {
    final TextView HelveticaText = (TextView)findViewById(item);
    HelveticaText.setTypeface(Helvetica);
};

これらの TextViews を使用して何もしない場合を除き、この方法で行うことはお勧めしません。findViewByID()比較的高価な呼び出しです。後で TextView 参照を使用する場合は、複数の呼び出しを行うのではなく、それらを保持する必要があります。findViewById()

TextView を HelveticaTextView のようなものでサブクラス化し、コンストラクターで書体を設定してから、TextView の代わりにそれを使用すると、Activity 内の書体をいじる必要がなくなります。

このようなもの:

public class HelveticaTextView extends TextView{
    public HelveticaTextView(Context c){
        Typeface Helvetica = Typeface.createFromAsset(c.getAssets(), "fonts/Helvetica.otf");
        super(c);
        this.setTypeface(Helvetica);
    }
    public HelveticaTextView(Context c, AttributeSet attrs){
    Typeface Helvetica = Typeface.createFromAsset(c.getAssets(), "fonts/Helvetica.otf");
        super(c, attrs);
        this.setTypeface(Helvetica);
    }
    public HelveticaTextView(Context context, AttributeSet attrs, int defStyle) {
    Typeface Helvetica = Typeface.createFromAsset(c.getAssets(), "fonts/Helvetica.otf");
        super(c, attrs, defStyle);
        this.setTypeface(Helvetica);
    }
}

次に、xmlレイアウトで変更します

<TextView .../>

<com.your.package.name.HelveticaTextView .../>
于 2012-11-09T01:49:59.443 に答える
1
int[] HelveticaArray = {R.id.Nike, R.id.Puma, R.id.Reebok, R.id.Umbro};

for (int item : HelveticaArray) {
    ((TextView).findViewById(item)).setTypeFace(Helvetica);
}
于 2012-11-09T01:50:03.863 に答える
1

おそらく次のようになります。

TextView[] textViews = { (TextView) findViewById(R.id.Nike), (TextView) findViewById(R.id.Puma) };

for (TextView view : textViews) {
   view.setTypeface(Helvetica);
}
于 2012-11-09T01:50:39.973 に答える