2013-07-26 27 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);