【问题标题】:Displaying Spinner with data items with different typeface显示具有不同字体的数据项的 Spinner
【发布时间】:2012-12-21 14:03:38
【问题描述】:

在我的应用程序中,我正在显示一个包含不同字体样式的微调器,例如如果字体名称是 US DNealian,那么它也应该以相同的字体显示。我知道如何通过 view.setTypeface(tf) 设置特定视图的字体,但我使用数组 arr_fonts 来填充 ArrayList 并且 ArrayList 将填充微调器的适配器。下面是我正在使用的代码 sn-p。

-> 用于填充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));

private void 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。但我不知道如何单独更改微调器中每个项目的字体。

任何人都可以建议任何东西或任何链接或相同的好教程。

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    尝试为微调器中的所有 TextView 设置自定义字体:

    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;
         }
    

    【讨论】:

    • In Typeface.createFromAsset(getAssets(), ARRLIST_FONTS.get(position));我应该在哪里提供 .ttf 文件来设置字体?您提供的代码不会更改该项目的字体。
    • @nidhi : 表示你在这行有什么问题吗?
    • @nidhi : 你在 assest 文件夹或其他地方有字体吗?
    • 是的.......它没有改变字体字体。显然它不会因为我们必须提供 font.ttf 才能更改字体;而在这里我们没有提供任何字体。我希望我清楚自己。请让我知道它是否仍然令人困惑。感谢您的建议。
    • 仅在资产文件夹中。如果我运行建议的代码,它会抛出异常:12-20 18:38:29.240: E/AndroidRuntime(1252): java.lang.RuntimeException: native typeface cannot be made
    【解决方案2】:

    首先,在您的 res/layout 目录中创建一个名为“my_spinner_style.xml”的新 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);
    

    通常您会为第二行创建一个新的 ArrayAdapter,但在这种情况下,您需要创建一个自定义 ArrayAdapter 并覆盖从我们的自定义微调器样式中获取 TextView 的方法。

    因此,您需要为您的自定义 ArrayAdapter 输入代码,如下所示: 私有类 MyArrayAdapter 扩展 ArrayAdapter {

    public MyArrayAdapter(上下文上下文,int textViewResourceId){ 超级(上下文,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");
    

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多