android中的Listview自定义适配器,仅通过传递数组适配器来更改字体

android中的Listview自定义适配器,仅通过传递数组适配器来更改字体,android,Android,这是我的类,在这里我向列表适配器R.id.listView1显示数据,所以我只需要一个自定义适配器,我是android新手 所有其他的教程都不是我能胜任的。 这只是一个小的帮助,我需要从社区,因为这对我帮助很大 import android.content.Context; import android.content.res.AssetManager; import android.database.Cursor; import android.database.sqlite.SQLiteDa

这是我的类,在这里我向列表适配器R.id.listView1显示数据,所以我只需要一个自定义适配器,我是android新手 所有其他的教程都不是我能胜任的。 这只是一个小的帮助,我需要从社区,因为这对我帮助很大

import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;


public class View_Data extends AppCompatActivity {


    public ArrayList<String> datax = new ArrayList<String>(); //used to store data from db

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_data);
        final String LOG_TAG = View_Data.class.getSimpleName();
        Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/AABOHI.TTF"); // this is the custom font i want to use

        try {
            String table = "questions";
            String[] columnsToReturn = {"question_id", "question", "def_font"};
            SQLiteDatabase mydatabase = openOrCreateDatabase("Data",MODE_PRIVATE,null);
            Typeface font = Typeface.createFromAsset(getAssets(), "fonts/AABOHI.TTF");

            Cursor dbCursor = mydatabase.query(table, null,null, null, null, null, null);

            dbCursor.moveToFirst();

            String temp ;

            int i = 0;
            ListView listView1 = (ListView) findViewById(R.id.listView1);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, datax);
            listView1.setAdapter(adapter);



            while (!dbCursor.isAfterLast()) {
                Log.v(LOG_TAG, String.valueOf(dbCursor.getString(0)));
                Log.v(LOG_TAG, String.valueOf(dbCursor.getString(1)));

                temp = " Question   : " + String.valueOf(dbCursor.getString(1)) ;//This is what i want in a custom font



                datax.add(temp);

                dbCursor.moveToNext();
                i++;
            }

            dbCursor.close();


            for (String row : datax) {

                Log.v(LOG_TAG, row);

            }


        } catch (Exception e) {
            Log.v(LOG_TAG, e.toString());
        }

        ListView listView1 = (ListView) findViewById(R.id.listView1);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, datax);
        listView1.setAdapter(adapter);



    }
}
导入android.content.Context;
导入android.content.res.AssetManager;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.graphics.Color;
导入android.graphics.Typeface;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类视图_数据扩展AppCompative活动{
public ArrayList datax=new ArrayList();//用于存储数据库中的数据
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.view\u数据);
最终字符串LOG_TAG=View_Data.class.getSimpleName();
Typeface custom_font=Typeface.createFromAsset(getAssets(),“fonts/AABOHI.TTF”);//这是我要使用的自定义字体
试一试{
String table=“问题”;
String[]columnsToReturn={“问题id”、“问题”、“定义字体”};
SQLiteDatabase mydatabase=openOrCreateDatabase(“数据”,MODE_PRIVATE,null);
Typeface font=Typeface.createFromAsset(getAssets(),“font/AABOHI.TTF”);
Cursor dbCursor=mydatabase.query(表,null,null,null,null,null);
dbCursor.moveToFirst();
字符串温度;
int i=0;
ListView listView1=(ListView)findViewById(R.id.listView1);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,datax);
listView1.setAdapter(适配器);
而(!dbCursor.isAfterLast()){
Log.v(Log_标记,String.valueOf(dbCursor.getString(0));
Log.v(Log_标记,String.valueOf(dbCursor.getString(1)));
temp=“Question:”+String.valueOf(dbCursor.getString(1));//这是我想要的自定义字体
添加数据(温度);
dbCursor.moveToNext();
i++;
}
dbCursor.close();
for(字符串行:datax){
Log.v(日志标签,行);
}
}捕获(例外e){
Log.v(Log_标记,例如toString());
}
ListView listView1=(ListView)findViewById(R.id.listView1);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,datax);
listView1.setAdapter(适配器);
}
}
对于这种类型的需求,您可以选择基本适配器,这样您就可以方便地修改许多内容。要了解并实现基本适配器,请浏览以下链接:

您可以轻松地为所需的数据和字体自定义基本适配器

Create a base adapter as below : 


public class CustomAdapter extends BaseAdapter {
    Context context;
    ArrayList<String> arrayList;
    LayoutInflater inflter;
    Typeface font;

    public CustomAdapter(Context applicationContext,  ArrayList<String> arrayList) {
        this.context = applicationContext;
        this.arrayList = arrayList;
        inflter = (LayoutInflater.from(applicationContext));
        font = Typeface.createFromAsset(context.getAssets(), "fonts/Questrial-Regular.ttf");
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflter.inflate(R.layout.activity_item, null);
        TextView tv = (TextView) view.findViewById(R.id.tv);
        tv.setText(arrayList.get(i));
        tv.setTypeface(font);
        return view;
    }
}
创建一个基本适配器,如下所示:
公共类CustomAdapter扩展了BaseAdapter{
语境;
ArrayList ArrayList;
更平坦的过滤器;
字体;
公共CustomAdapter(上下文应用程序上下文,ArrayList ArrayList){
this.context=applicationContext;
this.arrayList=arrayList;
inflter=(LayoutInflater.from(applicationContext));
font=Typeface.createFromAsset(context.getAssets(),“font/Questrial Regular.ttf”);
}
@凌驾
public int getCount(){
返回arrayList.size();
}
@凌驾
公共对象getItem(int i){
返回null;
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
视图=过滤器充气(R.layout.activity\u项,空);
TextView tv=(TextView)view.findViewById(R.id.tv);
tv.setText(arrayList.get(i));
设置字体(字体);
返回视图;
}
}
主要活动

public class MainActivity extends AppCompatActivity {
    ArrayList<String> simpleStringArrayList;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        simpleStringArrayList = new ArrayList<>();
        simpleStringArrayList.add("aaa");
        simpleStringArrayList.add("bbb");
        simpleStringArrayList.add("ccc");
        simpleStringArrayList.add("ddd");
        simpleStringArrayList.add("eee");
        simpleStringArrayList.add("fff");
        simpleStringArrayList.add("ggg");

        listView = (ListView) findViewById(R.id.listView);
        listView= (ListView) findViewById(R.id.listView);
        CustomAdapter customAdapter = new CustomAdapter(this, simpleStringArrayList);
        listView.setAdapter(customAdapter);
    }
}
public类MainActivity扩展了AppCompatActivity{
ArrayList simpleStringArrayList;
列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
simpleStringArrayList=新ArrayList();
simpleStringArrayList.添加(“aaa”);
simpleStringArrayList.add(“bbb”);
simpleStringArrayList.添加(“ccc”);
simpleStringArrayList.add(“ddd”);
simpleStringArrayList.添加(“eee”);
simpleStringArrayList.add(“fff”);
simpleStringArrayList.add(“ggg”);
listView=(listView)findViewById(R.id.listView);
listView=(listView)findViewById(R.id.listView);
CustomAdapter CustomAdapter=新的CustomAdapter(这是simpleStringArrayList);
setAdapter(customAdapter);
}
}
活动项目

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

主要活动

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dell1.myapplication.MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       />
</RelativeLayout>


您面临什么问题?您可以为使用自定义文本视图的列表创建行布局。在您的行中:TextView tv=(TextView)view.findViewById(R.id.tv);R.id.tv应该指向什么?我的xml中没有文本视图,但是listview。你可以只更改为listview,然后应用字体吗?lisview的资源id为:R.id.listView1,如何使用设置字体?您必须创建一个单独的布局(活动\项),其中仅包含文本视图(tv)。此布局将加载到getView方法中的自定义适配器中。从活动类加载arraylist和databa中的数据后