2014-12-04 75 views
0

我正在嘗試更改listview文本大小(默認情況下它看起來非常大)並且正在運行到錯誤中。我認爲這個想法是給列表視圖分配一個文本視圖並更改該文本視圖的屬性,但我開始認爲我正在以這種錯誤的方式進行。如果有人不介意看看我做錯了什麼,我將不勝感激。提前致謝!在android中更改列表視圖的文字大小

以下是錯誤:

12-03 21:59:26.894 24751-24751/my.obd2connector E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: my.obd2connector, PID: 24751 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{my.obd2connector/my.obd2connector.MyCar}: java.lang.ClassCastException: android.widget.ArrayAdapter cannot be cast to android.widget.TextView 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
      at android.app.ActivityThread.access$900(ActivityThread.java:161) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:157) 
      at android.app.ActivityThread.main(ActivityThread.java:5356) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassCastException: android.widget.ArrayAdapter cannot be cast to android.widget.TextView 
      at my.obd2connector.MyCar.fillList(MyCar.java:120) 
      at my.obd2connector.MyCar.onStart(MyCar.java:92) 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1189) 
      at android.app.Activity.performStart(Activity.java:5436) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
            at android.app.ActivityThread.access$900(ActivityThread.java:161) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:157) 
            at android.app.ActivityThread.main(ActivityThread.java:5356) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
            at dalvik.system.NativeStart.main(Native Method) 

這裏是填充在那裏我試圖改變大小和顏色的列表視圖代碼:

public void fillList() { 
     carList.add(make + " " + model + "\n" + vin); 

     mylistAdapter = new ArrayAdapter<String>(MyCar.this, android.R.layout.simple_list_item_single_choice, carList); 

     mylistView.setAdapter(mylistAdapter); 
     TextView tv = (TextView)mylistView.getAdapter(); 
     tv.setTextColor(Color.RED); 
     tv.setTextSize(12); 
     mylistAdapter.notifyDataSetChanged(); 
    } 
+1

您正在使用的適配器? – 2014-12-04 04:03:04

+0

其中:public ArrayAdapter mylistAdapter;我需要這個來填充字符串的ListView。 – Shawn 2014-12-04 04:03:58

回答

4

行:

TextView tv = (TextView)mylistView.getAdapter(); 

正在導致此問題。您不能將Adapter轉換爲TextView。相反,您需要爲您的ListView創建一個自定義佈局,並在那裏更改您在佈局上使用的TextView的屬性。

This tutorial涵蓋了創建一個簡單的自定義佈局的細節。

+0

我當然希望當我第一次開始大聲笑時看到本教程,謝謝先生。 – Shawn 2014-12-04 04:12:24

2

只需更改ListView控件的默認佈局,自定義佈局

而不是使用像這樣的:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_listview_item, list); 

您可以使用customLayout.xml:

adapter = new ArrayAdapter<String>(this, R.layout.customLayout, list); 

customLayout.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/listTextView" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:textColor="@color/black" 
android:textSize="20dp" /> 

,或者你可以使用這樣的:

listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MobileMuni.getBookmarkStore().getRecentLocations()) { 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView textView = (TextView) super.getView(position, convertView, parent); 
    textView.setTextSize(12); 

    return textView; 
} 

});

+0

我試過這個......每當我做出我的自定義佈局時,當我鍵入android.R.layout時它不顯示。它似乎只顯示simple_listview_item和其他人。是否有某個文件夾用於識別它? – Shawn 2014-12-04 04:11:49

+1

你可以使用第二個例子 – Ram 2014-12-04 04:17:58

+0

我會在調用setllapter()後,在filllist方法中調用該方法嗎? – Shawn 2014-12-04 04:20:55

1

如果你想chnage列表項的視圖大小。您可以在listitem的xml文件中執行此操作,並將其傳遞到適配器。

注: TextView的ID應該分配android.R.id.text1

0

你在正確的道路上。

mylistAdapter = new ArrayAdapter<String> (this, android.R.layout, list); 

也可以嘗試

mylistAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_listview_item, android.R.id.listTextView , list); 
相關問題