2013-07-26 29 views
0

我想更改我的ListView中列表项的字体表面。我为此创建了自定义项目,因为我想让用户从该活动中查看数据库的基本信息。我怎样才能改变我的意见的字体?在Android中更改没有SimpleAdapter的ListView的字体表面

MainActivity.java

//Method in that fetch the data to list view 
private void displayListView() { 
    final DatabaseHandler db = new DatabaseHandler(this); 

    Cursor cursor = db.fetchClinicByName(""); 

    // The desired columns to be bound 
    String[] columns = new String[] { Constants.CLINIC_ID, Constants.CLINIC_NAME, Constants.CLINIC_ADD }; 

    // the XML defined views which the data will be bound to 
    int[] to = new int[] { R.id.textviewId, R.id.tv_ClinicName, R.id.tv_ClinicAdd }; 

    simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.attribute_clinic, cursor, columns, to, 0); 

    ListView listView = (ListView) findViewById(R.id.lv_clinic); 

    listView.setAdapter(simpleCursorAdapter); 
    registerForContextMenu(listView); 

attribute_clinic.xml

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

    <LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Clinic Name:" 
      android:textSize="20sp" 
      android:layout_marginRight="40dp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/tv_ClinicName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="19sp" 
      android:text="clinic"/> 

    </TableRow> 

    <TableRow 
     android:id="@+id/tableRow01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Clinic Address:" 
      android:textSize="20sp" 
      android:layout_marginRight="20dp" 
      android:textStyle="bold" 
      android:paddingBottom="5dp" 
      android:layout_marginBottom="5dp" /> 

     <TextView 
      android:id="@+id/tv_ClinicAdd" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="19sp" 
      android:text="clinicAdd" 
      android:paddingBottom="5dp" 
      android:layout_marginBottom="5dp" /> 

    </TableRow>   
</LinearLayout> 

    <TextView 
     android:id="@+id/textviewId" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="114dp" 
     android:layout_marginTop="16dp" 
     android:visibility="gone" /> 

+0

您是否打算在其他地方也使用此自定义字体,或仅在此处使用?我问的原因是你可以扩展TextView并修改字体(如果你计划在其他地方使用这种自定义字体,这是个好主意),或者你可以重写setViewText(这对于这种情况非常有用)。 – btse

+1

谢谢!你的代码真的有用! – androidBoomer

回答

1

我还没有真正尝试这个,但是我相信这应该工作。

您需要覆盖SimpleCursorAdapter的setViewText()。当你的字体在你的资产/字体文件夹中时,它会是这样的。

private void displayListView() { 
    final DatabaseHandler db = new DatabaseHandler(this); 

    Cursor cursor = db.fetchClinicByName(""); 

    // The desired columns to be bound 
    String[] columns = new String[] { Constants.CLINIC_ID, Constants.CLINIC_NAME, Constants.CLINIC_ADD }; 

    // the XML defined views which the data will be bound to 
    int[] to = new int[] { R.id.textviewId, R.id.tv_ClinicName, R.id.tv_ClinicAdd }; 

    simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.attribute_clinic, 
                cursor, columns, to, 0) { 
     @Override 
     public void setViewText(TextView v, String text) { 
      Typeface face = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf"); 
      v.setTypeface(face); 
      v.setText(text); 
     } 
    }; 

    ListView listView = (ListView) findViewById(R.id.lv_clinic); 

    listView.setAdapter(simpleCursorAdapter); 
    registerForContextMenu(listView);