如何在动态创建的ListView中更改文本颜色,大小和字体

时间:2016-08-30 23:20:17

标签: java android xml listview text

我正在尝试使用EditText和ListView创建待办事项列表。如何更改文本字体,颜色和大小?我已经看到了几个使用数组适配器的答案,但不知道如何将它们应用于动态创建的ListView项目。

这是我到目前为止所做的:

ActivityMain.xml

    <RelativeLayout
    android:id="@+id/AgendaRL"
    android:orientation="vertical"
    android:background="#3E2723"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/agenda"
        android:layout_width="370sp"
        android:layout_height="wrap_content"
        android:text="@string/agenda"
        android:textSize="40sp"
        android:textColor="#b7950b"
        android:layout_marginTop="12sp"
        android:layout_marginLeft="12sp"
        android:layout_marginStart="12sp"
        android:layout_marginBottom="0sp" />

    <View
        android:background="#b7950b"
        android:layout_below="@+id/agenda"
        android:layout_width="28sp"
        android:layout_height="36sp"/>

    <EditText
        android:id="@+id/aTask"
        android:layout_below="@+id/agenda"
        android:background="@drawable/ribbon"
        android:inputType="text"
        android:text="@string/Add_Task"
        android:textColor="#3E2723"
        android:maxLength="22"
        android:maxLines="1"
        android:layout_width="330sp"
        android:layout_height="36sp"
        android:textSize="28sp"
        android:layout_marginLeft="28sp"
        android:layout_marginStart="28sp"/>

    <Button
        android:id="@+id/Done"
        style="?android:attr/borderlessButtonStyle"
        android:layout_marginLeft="250sp"
        android:layout_marginStart="250sp"
        android:background="#b7950b"
        android:text="@string/Done"
        android:textColor="#3E2723"
        android:textSize="18sp"
        android:layout_below="@+id/agenda"
        android:layout_width="48sp"
        android:layout_height="36sp"
        android:onClick="DoneClick"/>

    <ListView
        android:id="@+id/LVAgenda"
        android:layout_below="@+id/aTask"
        android:divider="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</RelativeLayout>

MainActivity.Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
       ListView LVAgenda = (ListView) findViewById(R.id.LVAgenda);
    arrayListAgenda = new ArrayList<String>();
    arrayAdapterAgenda = new ArrayAdapter<String>(this,      android.R.layout.simple_list_item_1, arrayListAgenda);
    LVAgenda.setAdapter(arrayAdapterAgenda);
}

public void DoneClick(View v){
    EditText aTask = (EditText)findViewById(R.id.aTask);
    String agenda = aTask.getText().toString().trim();

    if(agenda.isEmpty()){
        return;
    }

    arrayAdapterAgenda.add(agenda);
    aTask.setText("Add task");


}

1 个答案:

答案 0 :(得分:1)

正如commonsware所说,你可以使用ArrayAdapter的getView()来做到这一点。

我已经使用ListAdapter实现了Facebook好友选择器。我将分享代码。可能有帮助。请试试。

首先在布局中制作一个XML文件,用于定义“待办事项列表”中每个项目的布局。 在我的情况下,它是一个Facebook个人资料图像和一个选中的文本框。 (还有一个用于对齐的间隔符)

<强> Facebook.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="wrap_content"
    android:orientation="vertical">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/img"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:paddingLeft="10dp"/>

        <CheckedTextView
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|right"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:checkMark="?android:attr/listChoiceIndicatorMultiple"
            android:textColor="@android:color/black"
            android:textStyle="bold" />

    </LinearLayout>
    <View
        android:id="@+id/spacer"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/white"/>
</LinearLayout>

现在准备你的数据阵列。在我的例子中,它是自定义类数组,其中每个元素包含facebook名称,profilepic和布尔值。

public class Item{
        public final String text;
        public final Drawable icon;
        public boolean isChecked;
        public Item(String text, Drawable icon, boolean ischeck) {
            this.text = text;
            this.icon = icon;
            this.isChecked = ischeck;
        }
        @Override
        public String toString() {
            return text;
        }
    }

我通过从其他活动传递 friendsArray 来调用以下代码。

final Item[] items =   new Item[friendsArray.length];
    try {
        int a = 1;

        for (int i = 0; i < friendsArray.length; i++) {
            tsk = new DownloadImageTask();
            Bitmap bmp = (Bitmap) tsk.execute(new RaceActivity.FriendInfo[]{friendsArray[i]}).get();
            Resources res = getActivity().getResources();
            drawable = new BitmapDrawable(res, bmp);
            items[i] = new Item(friendsArray[i].name, drawable,false);
        }
    }
    catch(Exception ex)
    {
    }

现在您的数据阵列已准备就绪。您可以将此传递给ListAdapter(在我的情况下为项目)。

很高兴了解List适配器的工作原理。我创建了一个可滚动的List。这个逻辑的作用是在滚动时重用视图。

 ListAdapter adapter = new ArrayAdapter<Item>(
                getActivity(),
                android.R.layout.select_dialog_item,
                android.R.id.text1,
                items){
            public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                FaceBookHolder fb = new FaceBookHolder();
                if(convertView == null)
                {
                    LayoutInflater inflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = inflater.inflate(R.layout.facebook,null);
                    fb.Name = (CheckedTextView) v.findViewById(R.id.name);
                    fb.img = (ImageView) v.findViewById(R.id.img);
                    fb.spacer = (View) v.findViewById(R.id.spacer);
                    fb.Name.setOnClickListener(new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View v)
                        {
                            CheckedTextView cv = (CheckedTextView)v;
                            if(cv.isChecked())
                                cv.setChecked(false);
                            else
                                cv.setChecked(true);
                            for(int i =0;i< items.length; i++)
                            {
                                if(items[i].text == cv.getText())
                                {
                                     items[i].isChecked = cv.isChecked();
                                }
                            }
                        }
                    });
                    v.setTag(fb);
                }
                else
                    fb = (FaceBookHolder) v.getTag();
                Item itm = items[position];
                fb.Name.setText(itm.text);
                fb.img.setImageDrawable(itm.icon);
                fb.Name.setChecked(itm.isChecked);
                return v;
            }
        };

你在getView()中得到了视图,所以你可以根据需要修改它。(改变颜色,字体等)

希望它有所帮助!干杯!