无论如何,更改可扩展列表视图子文本某些部分的颜色/字体



我只想将子文本的某些部分(在我的可扩展列表视图中)更改为不同的颜色和/或字体。

例:

世界您好! (我只想要粗体的你好)

如果可能的话,有人请分享。

可扩展列表适配器:

public class ExpandListAdapter extends BaseExpandableListAdapter {
    private Context context;
    private ArrayList<Group> groups;
    public ExpandListAdapter(Context context, ArrayList<Group> groups) {
        this.context = context;
        this.groups = groups;
    }
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        ArrayList<Child> chList = groups.get(groupPosition).getItems();
        return chList.get(childPosition);
    }
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
    @Override
    public View getChildView(int groupPosition, int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        Child child = (Child) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.child_item, null);
        }
        TextView tv = (TextView) convertView.findViewById(R.id.country_name);
        ImageView iv = (ImageView) convertView.findViewById(R.id.flag);
        tv.setText(child.getName().toString());
        iv.setImageResource(child.getImage());
        return convertView;
    }
    @Override
    public int getChildrenCount(int groupPosition) {
        ArrayList<Child> chList = groups.get(groupPosition).getItems();
        return chList.size();
    }
    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }
    @Override
    public int getGroupCount() {
        return groups.size();
    }
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        Group group = (Group) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater inf = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.group_item, null);
        }
        TextView tv = (TextView) convertView.findViewById(R.id.group_name);
        tv.setText(group.getName());
        return convertView;
    }
    @Override
    public boolean hasStableIds() {
        return true;
    }
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}
我不知道

在不将文本分解为单独的文本视图的情况下有任何理智的方法可以做到这一点。

可以将传入字符串拆分child.getName().toString().split(",")(请参阅拆分文档),并使用生成的数组填充单独的 TextViews,每个 TextView 具有不同的样式。

例如,在您现有的getChildView中:

TextView tv1 = (TextView) convertView.findViewById(R.id.country_name_1);
TextView tv2 = (TextView) convertView.findViewById(R.id.country_name_2);
String[] splitString = child.getName().toString().split(",");
tv1.setText(splitString[0]);
tv2.setText(splitString[1]);

当然,您将添加一些错误检查,但这取决于您(确保child.getName()不为空,splitString的长度至少为2,因此您不会获得索引出界异常等)。

我决定为粗体文本视图创建一个setter和getter,然后将其挂接到Expandablelistview的数组列表中。 这可能不是最有效的方法,但它解决了我的问题。

最新更新