天天看點

Android使用BaseAdapter綁定ListView實作不同item的TextView多種文字變色

工程目錄:

Android使用BaseAdapter綁定ListView實作不同item的TextView多種文字變色

Activity

package com.example.test1121;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.ScrollingMovementMethod;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar bar=getSupportActionBar();
        bar.hide();

        ListView lv=findViewById(R.id.lv);
        String color[]={
                "紅色",
                "黃色",
                "藍色"
        };
        SpannableString spannableString=new SpannableString("我是紅色字元串");
        ForegroundColorSpan fc=new ForegroundColorSpan(Color.RED);
        spannableString.setSpan(fc,0,3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

        SpannableString spannableString2=new SpannableString("我是黃色字元串");
        ForegroundColorSpan fc2=new ForegroundColorSpan(Color.YELLOW);
        spannableString2.setSpan(fc2,1,3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

        SpannableString spannableString3=new SpannableString("我是藍色字元串");
        ForegroundColorSpan fc3=new ForegroundColorSpan(Color.BLUE);
        spannableString3.setSpan(fc3,2,3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

        SpannableString ss[]={
                spannableString,
                spannableString2,
                spannableString3
        };

        final List<Map<String,Object>> list=new ArrayList<>();
        for(int i=0;i<color.length;i++){
            Map<String,Object> item=new HashMap<>();
            item.put("color",color[i]);
            item.put("spannableString",ss[i]);
            list.add(item);
        }

        BaseAdapter adapter=new BaseAdapter() {
            @Override
            public int getCount() {
                return list.size();
            }

            @Override
            public Object getItem(int position) {
                return list.get(position);
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View item=View.inflate(getApplicationContext(),R.layout.adapter_layout,null);
                TextView c=item.findViewById(R.id.color);
                TextView mess=item.findViewById(R.id.mess);
                Map<String,Object> map=list.get(position);
                c.setText(map.get("color")+" ");
                mess.setText((SpannableString)map.get("spannableString"));
                return item;
            }
        };
        lv.setAdapter(adapter);
    }
}

           

adapter_layout裡插入兩個水準TextView

Android使用BaseAdapter綁定ListView實作不同item的TextView多種文字變色

activity_main中插入一個ListView

Android使用BaseAdapter綁定ListView實作不同item的TextView多種文字變色
Android使用BaseAdapter綁定ListView實作不同item的TextView多種文字變色