2

我想自定义我的 ListView。我更改了 list_view 中文本的颜色,但我无法更改 ListView 文本的字体样式。我为文本提供了字体系列,但它没有显示与字体相关的任何更改。

这就是我到目前为止所做的......

XML

 <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="40sp"
        android:gravity="center_vertical"
        android:textColor="@color/aqua"
        android:fontFamily="@raw/chocd"
        android:textSize="25sp"
         />

代码

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                                         R.layout.listview_layout,R.id.txt,list1);
listview.setAdapter(adapter);
4

5 回答 5

4

您可以使用它来更改为不同的内置字体,在布局 XML 中使用android:typeface或在 Java中使用setTypeface()

Typeface type = Typeface.createFromAsset(getAssets(),""); 
   txtyour.setTypeface(type);
于 2013-09-05T07:27:57.700 回答
4

Android 不允许您从 XML 布局设置自定义字体。

TextView textView = (TextView) findViewById(<your TextView ID>);
Typeface typeFace = Typeface.createFromAsset(getAssets(), "<file name>");
tv.setTypeface(typeFace);

请注意,您只能setContentView()在调用后运行此代码。欲了解更多信息

于 2013-09-05T07:29:55.377 回答
2

假设您想在 TextView 上获取 Roboto-Light 字体,将相应字体的“.ttf”文件放入您的资产中,然后将 TextView 设置为该格式:

Typeface robotolight = Typeface.createFromAsset(getAssets(),"Roboto-Light.ttf");
textView.setTypeface(robotolight);

那应该工作!

于 2013-09-05T07:35:00.587 回答
1

您可以创建自己的文本视图并在任何您想要的地方使用它。如果您可以在其他地方使用相同的字体,那么您绝对应该这样使用。

public class TextViewLight extends TextView {

    public TextViewLight(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public TextViewLight(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public TextViewLight(Context context) {
        super(context);
        init();
    }

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(),"fonts/opensans_light.ttf");
        setTypeface(tf);
    }

}

比你可以像这样在xml中使用这个textview。

<com.predict.android.views.TextViewLight
    android:id="@+id/title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/settings"/>

您还应该将字体存储在 assets 文件夹中。因此,在资产中创建一个文件夹“字体”并将它们保存在那里。

如果您使用自定义类来处理这样的浅色、粗体、斜体字体,当您需要更改整个应用程序的字体时,您只需在自定义 textview 类中更改一行。在几秒钟内查看具有不同字体样式的应用程序非常实用。

于 2013-09-05T07:59:46.133 回答
0

使用自定义列表适配器,您可以完全自由地更改字体样式和条件字体样式。

private class CustomListAdapter extends ArrayAdapter{
        private Context mContext;
        private int id;
        private List <String>items ;

        public CustomListAdapter(Context context, int textViewResourceId , List<String> list ) 
        {
            super(context, textViewResourceId, list);           
            mContext = context;
            id = textViewResourceId;
            items = list ;
        }

        @Override
        public View getView(int position, View v, ViewGroup parent)
        {
            View mView = v ;
            if(mView == null){
                LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                mView = vi.inflate(id, null);
            }

            TextView text = (TextView) mView.findViewById(R.id.textView);

            if(items.get(position) != null )
            {
               Typeface typeFace = Typeface.createFromAsset(getAssets(), "<file name>");
tv.setTypeface(typeFace);

            }

            return mView;
        }

    }

并像访问适配器一样

CustomListAdapter listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList);
listView.setAdapter(listAdapter);
于 2013-09-05T07:46:27.513 回答