2014-12-04 3 views
0

Я пытаюсь изменить размер текста списка (по-видимому, он довольно большой по умолчанию), и я столкнулся с ошибкой. Я думаю, идея состоит в том, чтобы назначить текстовое представление в listview и изменить свойства этого текстового представления, но я начинаю думать, что я собираюсь сделать это неправильно. Было бы очень признательно, если бы кто-то не возражал взглянуть на то, что я делаю неправильно. Заранее спасибо!Изменить размер шрифта 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) 

Вот код, чтобы заполнить ListView, где я пытаюсь изменить размер и цвет:

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

, какой адаптер вы используете? –

+0

Its: public ArrayAdapter mylistAdapter; Мне нужно это, чтобы заполнить ListView строк. – Shawn

ответ

4

Линия:

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

вызывает проблемы. Вы не можете отличить Adapter до TextView. Вместо этого вам нужно создать собственный макет для вашего ListView и там изменить свойства TextView, которые вы используете на макете.

This tutorial охватывает детали создания простой пользовательской раскладки.

+0

Я очень хочу, чтобы я увидел этот учебник, когда я впервые начал LOL, спасибо, сэр. – Shawn

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

+1

вы можете использовать второй пример – Ram

+0

Я бы назвал это после того, как я сделаю setAdapter() в методе filllist? – Shawn

1

Если вы хотите, чтобы размер элемента списка элементов chnage. Вы можете сделать это в своем xml-файле listitem и передать его вашему адаптеру.

Примечание: TextView идентификатор должен назначить 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); 
Смежные вопросы