更改Android/Eclipse中ListView的字体大小

21

我该如何改变ListView元素中的字体大小?在我的main.xml文件中,我已经尝试了多种不同的android:textSize值(pt、px、sp、dp),但似乎都没有产生任何变化。

以下是我目前在main.xml中使用的代码:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:textColor="#ffffff"
    android:background="#000080" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:dividerHeight="1px"
    android:layout_marginTop="5px" 
    android:textSize="8px"/>

这是我的Java代码:

package com.SorenWinslow.TriumphHistory;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class TriumphHistory extends ListActivity {
    String[] HistoryList;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayAdapter<String> adapter;
        HistoryList = getResources().getStringArray(R.array.history);
        adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,HistoryList);
        setListAdapter(adapter);
    }

}
6个回答

58

进入布局(layout)创建一个名为mylist.xml的新XML文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@android:id/text1"  
        android:paddingTop="2dip" 
        android:paddingBottom="3dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

现在在代码中

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

把它改为

        adapter = new ArrayAdapter<String> (this,R.layout.mylist,HistoryList);

这个解决方案在我尝试将其制作成单选列表时不起作用,有什么想法吗? - Garima Tiwari
1
@GarimaTiwari 有什么问题吗?当您尝试执行操作时,出现了什么意外行为? - Shereef Marzouk

28

有两种方法:

  1. 从Android源码中复制 simple_list_item_1.xml,进行修改,并使用它代替 android.R.layout.simple_list_item_1
  2. 使用 BaseAdapter,并在 getView(..) 调用中修改字体大小。

我建议您选择后者。


如何定义在getView()中更改大小的位置? - Shouvik
正如Alex所建议的那样,覆盖Adapter的getView()方法是有意义的。我使用这种方法,它运行良好。 - tamsler
我使用了选项1,因为我觉得不需要做太多的事情,重写getView方法听起来有些过度设计了。 - Naeem A. Malik
2
这只是一个不完整的答案。没有提到调用方法(setTextSize)的方法;适配器中的View对象是ListView对象,而不是与之相关联的TextView;因此,“setTextSize”不是针对该视图的方法;如果您找出并调用“findViewById”来获取相关的TextView,则在尝试使用“android.R.layout.simple_list_item_1”作为ID时会显示错误;等等。不确定为什么选择或点赞此答案,因为它需要十几个后续问题才能实际获得可行的结果。 - JackLThornton

6
请创建另一个名为list_item.xml的文件。
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:padding="6dp"
    android:textSize="21sp">


0
快速答案是,您只能使用自己的布局而不是android.R.layout.simple_list_item来更改文本大小。通过这样做,您可以更改TextView属性,如文本大小。但是,如果您没有使用自己的布局工作列表,则可能会在第一次使用时显得有点复杂。我会尝试回来编辑这个答案以提供更多信息,但我建议您寻找有关自定义列表视图的教程-那将向您展示如何“填充”自己的布局文件。

0
创建另一个XML文件,用于列表行中的文本。
然后在TextView中添加android:layout_height="?android:attr/listPreferredItemHeight" :D(将其放入相对布局而不是线性布局中)
接下来,在setContentView(R.layout.listview)中使用先前的ListView XML
并将另一个XML文件用于您的ArrayAdapter代码
ArrayAdapter适配器=新ArrayAdapter(this,                 R.layout.yoursecondLayoutforthelistswithText,R.id.titles,HistoryList)
其中R.id.titles是TextView的ID

-1

你可以将字体大小保存在sharedprefs中,然后重新创建适配器。

    SharedPreferences.Editor ed = mSharedPreferences.edit();
    ed.putFloat("fontTwosize", sizeTwo);
    ed.commit();

    adapterz = new LazyziyaratAdapter(MainActivity.this,
                    ziyaratList);

    listz.setAdapter(adapterz);

并且在你的适配器的getview方法中

 holder.text.setTextSize(TypedValue.COMPLEX_UNIT_SP,G.mSharedPreferences.getFloat("fontTwosize", 25));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接