3

私のアプリでは、異なるフォント スタイルを含むスピナーを表示しています。たとえば、フォント名が US DNealian の場合、同じ書体で表示されるはずです。view.setTypeface(tf) で特定のビューの書体を設定する方法は知っていますが、配列 arr_fonts を使用して ArrayList を埋めており、その ArrayList がスピナーのアダプタを埋めます。以下は、私が使用しているコードスニペットです。

-> ArrayList を満たすための文字列配列

private String arr_fonts[] = {"US: D'Nealian", "US: D'Nealian Cursive", "US: Zaner-Bloser", "US: Zaner-Bloser Cursive",
            "Aus: NSW/ACT", "Aus: NSW/ACT Cursive", "Aus: Qld Beginners", "Aus: Qld Cursive", "Aus: SA Beginners", "Aus: SA Cursive",
            "Aus: Tas Beginners", "Aus: Tas Cursive", "Aus: Vic/NT/WA", "Aus: Vic/NT/WA Cursive", "WA Sassoon", "WA Sassoon Infant",
            "NZ Beginners","UK Beginners", "UK Cursive", "Century Gothic (HWT)"};

->アダプタを埋めるためのArraylist

ARRLIST_FONTS = new ArrayList<String>(Arrays.asList(arr_fonts));

プライベートボイド set_font_name_Adapter() {

    sp_fonts = (Spinner)findViewById(R.id.spFont);

     font_name_Adapter= new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,ARRLIST_FONTS)
              {
            public View getView(int position, View convertView,ViewGroup parent) {
                    View v = super.getView(position, convertView, parent);
                    ((TextView) v).setTextSize(12);
                    ((TextView) v).setTextColor(Color.WHITE);
                    return v;
          }

};

        font_name_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        sp_fonts.setAdapter(font_name_Adapter);

        sp_fonts.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {

                font = ARRLIST_FONTS.get(arg2);

                }


                System.out.println("Selected item is ................."+font);

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {


            }
        });

}

すべてのフォント名に .ttf があります。しかし、スピナーの各アイテムの書体を個別に変更する方法がわかりません。

誰でも同じこと、リンク、または良いチュートリアルを提案できますか。

ありがとう。

ここに画像の説明を入力

4

2 に答える 2

2

spinner のすべての TextView にカスタム Typeface を設定してみてください:

Typeface typeface;
font_name_Adapter= new ArrayAdapter<String>
                (this,android.R.layout.simple_spinner_item,ARRLIST_FONTS)
       {
            public View getView(int position, View convertView,ViewGroup parent) {
               View v = super.getView(position, convertView, parent);
               ((TextView) v).setTextSize(12);
               ((TextView) v).setTextColor(Color.WHITE);

                if(position<=ARRLIST_FONTS.size()){
                 typeface = 
                  Typeface.createFromAsset(Your_Current_Activity.this.getAssets(),
                               "fonts/yourfontname.ttf"); 
                     ((TextView) v).setTypeface(typeface);
                   }

                    return v;
     }
于 2012-12-20T12:09:35.323 に答える
1

最初に、「my_spinner_style.xml」という名前の res/layout ディレクトリに新しい XML ファイルを作成し、次のような内容を入れます。

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="9pt"
android:singleLine="True"
android:id="@+id/spinnerTarget"
android:textColor="#000000"
android:gravity="center"/>

次に、コードで次のようなものを使用します。

Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);
mySpinnerArrayAdapter = new MyCustomArrayAdapter(this, R.layout.my_spinner_style); mySpinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

通常は 2 行目に新しい ArrayAdapter を作成しますが、この場合はカスタム ArrayAdapter を作成し、カスタム スピナー スタイルから TextView を取得するメソッドをオーバーライドする必要があります。

そのため、次のように、カスタム ArrayAdapter のコードを挿入する必要があります。 private class MyArrayAdapter extends ArrayAdapter {

public MyArrayAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); }

public TextView getView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(myFont);
return v;
}

public TextView getDropDownView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(myFont);
return v;
}

}

使用するフォントは assets/fonts ディレクトリに存在する必要があり、次のようにアクセスします。

Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf");
于 2012-12-21T06:03:38.850 に答える