Android开发教程根据外框颜色决定文字颜色以及选中颜色

64 阅读2分钟
Android开发教程根据外框颜色决定文字颜色以及选中颜色

往往一些个性标签的选择,文字颜色和外框颜色要统一,还有选中颜色

一、思路:

自定义TextView

二、效果图:

在这里插入图片描述

三、关键代码:
public class MainActivity extends AppCompatActivity {

    private LinearLayout mGroup;

    private LinkedList<Integer> mLinkedList;
    private View.OnClickListener mOnClickListener;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 保存选中的id集合
        mLinkedList = new LinkedList<>();

        mOnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyTextView mtv = (MyTextView) v;
                if (!mtv.isChecked()) {
                    if (mLinkedList.size() < 3) {
                        mtv.setChecked(true);
                        addId(mtv.getBean().getId());
                    } else {
                        Toast.makeText(MainActivity.this,"最多添加3个",Toast.LENGTH_SHORT).show();
                    }
                } else {
                    removeId(mtv.getBean().getId());
                    mtv.setChecked(false);
                }
            }
        };

        mGroup = findViewById(R.id.group);
        String jsonInfo = "[{\"colour\":\"#141313\",\"colour2\":\"#873d3d\",\"id\":\"15\",\"ifcheck\":\"0\",\"name\":\"小哥哥\",\"orderno\":\"0\"}, {\"colour\":\"#4edc90\",\"colour2\":\"#22804e\",\"id\":\"1\",\"ifcheck\":\"0\",\"name\":\"小清新\",\"orderno\":\"1\"}, {\"colour\":\"#2595b8\",\"colour2\":\"#33caf9\",\"id\":\"2\",\"ifcheck\":\"0\",\"name\":\"阳光女神\",\"orderno\":\"2\"}, {\"colour\":\"#e5007f\",\"colour2\":\"#f05bad\",\"id\":\"3\",\"ifcheck\":\"0\",\"name\":\"性感\",\"orderno\":\"3\"}, {\"colour\":\"#d48d24\",\"colour2\":\"#f9b552\",\"id\":\"4\",\"ifcheck\":\"0\",\"name\":\"二次元\",\"orderno\":\"4\"}, {\"colour\":\"#b3aa04\",\"colour2\":\"#fff649\",\"id\":\"5\",\"ifcheck\":\"0\",\"name\":\"好声音\",\"orderno\":\"5\"}, {\"colour\":\"#0a8c88\",\"colour2\":\"#06d9d1\",\"id\":\"6\",\"ifcheck\":\"0\",\"name\":\"喊麦达人\",\"orderno\":\"6\"}, {\"colour\":\"#648717\",\"colour2\":\"#8fc41e\",\"id\":\"7\",\"ifcheck\":\"0\",\"name\":\"才艺\",\"orderno\":\"7\"}, {\"colour\":\"#990e5a\",\"colour2\":\"#ea2893\",\"id\":\"8\",\"ifcheck\":\"0\",\"name\":\"潮范儿\",\"orderno\":\"8\"}, {\"colour\":\"#2f9aba\",\"colour2\":\"#4cd1f8\",\"id\":\"9\",\"ifcheck\":\"0\",\"name\":\"舞蹈达人\",\"orderno\":\"9\"}, {\"colour\":\"#53730f\",\"colour2\":\"#8fc41e\",\"id\":\"10\",\"ifcheck\":\"0\",\"name\":\"学生\",\"orderno\":\"10\"}, {\"colour\":\"#1a9995\",\"colour2\":\"#01d8d0\",\"id\":\"11\",\"ifcheck\":\"0\",\"name\":\"高颜值\",\"orderno\":\"11\"}, {\"colour\":\"#ed6942\",\"colour2\":\"#e69881\",\"id\":\"12\",\"ifcheck\":\"0\",\"name\":\"游戏大神\",\"orderno\":\"12\"}, {\"colour\":\"#01d9ce\",\"colour2\":\"#6be3dd\",\"id\":\"13\",\"ifcheck\":\"0\",\"name\":\"帅气男神\",\"orderno\":\"13\"}, {\"colour\":\"#918b13\",\"colour2\":\"#fff100\",\"id\":\"14\",\"ifcheck\":\"0\",\"name\":\"搞笑\",\"orderno\":\"14\"}]";
        List<ImpressBean> list = JSON.parseArray(jsonInfo, ImpressBean.class);
        int line = 0;
        int fromIndex = 0;
        boolean hasNext = true;
        while (hasNext) {
            LinearLayout linearLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.view_impress_line, mGroup, false);
            int endIndex = line % 2 == 0 ? fromIndex + 4 : fromIndex + 3;
            if (endIndex >= list.size()) {
                endIndex = list.size();
                hasNext = false;
            }
            for (int i = fromIndex; i < endIndex; i++) {
                MyTextView item = (MyTextView) getLayoutInflater().inflate(R.layout.view_impress_item, linearLayout, false);
                ImpressBean impressBean = list.get(i);
                if (impressBean.isChecked()) {
                    addId(impressBean.getId());
                }
                item.setBean(impressBean);
                linearLayout.addView(item);
                item.setOnClickListener(mOnClickListener);
            }
            fromIndex = endIndex;
            line++;
            mGroup.addView(linearLayout);
        }

    }

    private void addId(int impressId) {
        mLinkedList.add(impressId);
    }

    private void removeId(int impressId) {
        int index = -1;
        for (int i = 0, size = mLinkedList.size(); i < size; i++) {
            if (impressId == mLinkedList.get(i)) {
                index = i;
                break;
            }
        }
        if (index != -1) {
            mLinkedList.remove(index);
        }
    }
}
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码看简介联系我,或者私信我