这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。
先看效果图:
这两天做了一个项目,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。
在源码里面加了两个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/**修改某些位置定点颜色**/ public void setTagsByPosition(HashMap<Integer, Boolean> positions, List<String> tagList){ this .tags = tagList; this .removeAllViews(); if (tags != null && tags.size() > 0 ) { for ( int i = 0 ; i < tags.size(); i++) { TextView tagView = (TextView) mInflater.inflate(mTagResId, null ); if (mTagResId == DEFAULT_TAG_RESID) { tagView.setBackgroundResource(mBackground); tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize); if (positions.get(i)){ tagView.setTextColor(mSeclectTagColor); } else { tagView.setTextColor(mTagColor); } } LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); tagView.setLayoutParams(layoutParams); tagView.setText(tags.get(i)); tagView.setTag(TYPE_TEXT_NORMAL); final int finalI = i; tagView.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if (onTagClickListener != null ) { onTagClickListener.onTagClick(finalI); } } }); addView(tagView); } } postInvalidate(); } /**最前面的修改颜色**/ public void setTagsByLength( int length,List<String> tagList){ this .tags = tagList; this .removeAllViews(); if (tags != null && tags.size() > 0 ) { for ( int i = 0 ; i < tags.size(); i++) { TextView tagView = (TextView) mInflater.inflate(mTagResId, null ); if (mTagResId == DEFAULT_TAG_RESID) { tagView.setBackgroundResource(mBackground); tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize); if (i >= length){ tagView.setTextColor(mTagColor); } else { tagView.setTextColor(mSeclectTagColor); } } LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); tagView.setLayoutParams(layoutParams); tagView.setText(tags.get(i)); tagView.setTag(TYPE_TEXT_NORMAL); final int finalI = i; tagView.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if (onTagClickListener != null ) { onTagClickListener.onTagClick(finalI); } } }); addView(tagView); } } postInvalidate(); } |
一目了然的方法,所以不多做解释
另外加了一个选中字体颜色的全局常量,和一个int变量
1
2
|
private static final int SELCECT_TEXT_COLOR = R.color.yellow_bg; //选中后的标签颜色 private int mSeclectTagColor; |
在styles.xml中给TagCloudView增加了一个选中字体颜色的attr
1
|
<attr name= "tcvSeclecTextColor" format= "reference" /> |
剩下就是运用的地方
不多说,直接上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
public class MainActivity extends AppCompatActivity { private TagCloudView normalTagView; //标准 private TagCloudView selectTagUseView; //置前 private TagCloudView positionsView; //定点 private List<String> AllTagsNormal = new ArrayList<>( 0 ); //整个标签存放集合 private List<String> AllTagsSelect = new ArrayList<>( 0 ); //整个标签存放集合 private List<String> selectTags = new ArrayList<>( 0 ); //选中的标签 private List<String> notSelectTags = new ArrayList<>( 0 ); //未选中的标签 private List<String> AllTagsPosition = new ArrayList<>( 0 ); //整个标签存放集合 private HashMap<Integer, Boolean> map = new HashMap<>( 0 ); //记录选择的位置 @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); normalTagView = (TagCloudView) findViewById(R.id.normalTag); selectTagUseView = (TagCloudView) findViewById(R.id.selcetTagUse); positionsView = (TagCloudView) findViewById(R.id.positionsTag); setSupportActionBar(toolbar); for ( int i = 0 ; i < 15 ; i++) { AllTagsNormal.add( "普通标签" + i); AllTagsSelect.add( "置前标签" + i); AllTagsPosition.add( "定点标签" + i); map.put(i, false ); } normalTagView.setOnTagClickListener( new TagCloudView.OnTagClickListener() { @Override public void onTagClick( int position) { Snackbar.make(normalTagView, AllTagsNormal.get(position), Snackbar.LENGTH_LONG) .setAction( "Action" , null ).show(); } }); selectTagUseView.setOnTagClickListener( new TagCloudView.OnTagClickListener() { @Override public void onTagClick( int position) { if (selectTags.contains(AllTagsSelect.get(position))) { //如果选中的里面有 就删掉 扔到未选中的里面去 selectTags.remove(position); notSelectTags.add(AllTagsSelect.get(position)); } else { selectTags.add(AllTagsSelect.get(position)); // notSelectTags.remove(position - selectTags.size() + 1 ); } Snackbar.make(selectTagUseView, AllTagsSelect.get(position), Snackbar.LENGTH_LONG) .setAction( "Action" , null ).show(); AllTagsSelect.clear(); //清空,重新装数据 AllTagsSelect.addAll(selectTags); AllTagsSelect.addAll(notSelectTags); bindSelectUseView(selectTags.size()); } }); positionsView.setOnTagClickListener( new TagCloudView.OnTagClickListener() { @Override public void onTagClick( int position) { bindPositionView(position); Snackbar.make(positionsView, AllTagsPosition.get(position), Snackbar.LENGTH_LONG) .setAction( "Action" , null ).show(); } }); normalTagView.setTags(AllTagsNormal); int selectLength = 4 ; bindSelectUseView(selectLength); //用一个hashmap存放当前位置是否需要变色 bindPositionView( 3 ); bindPositionView( 6 ); bindPositionView( 9 ); } /** * 定点标签记录和view变化 **/ private void bindPositionView( int position) { for ( int i = 0 ; i < AllTagsPosition.size(); i++) { if (i == position) { if (map.get(i)) { map.put(i, false ); } else { map.put(i, true ); } } else { if (map.get(i)) { map.put(i, true ); } else { map.put(i, false ); } } } positionsView.setTagsByPosition(map, AllTagsPosition); for ( int i = 0 ; i < AllTagsPosition.size(); i++) { if (map.get(i)) { positionsView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow); } } } /** * 选中标签的运用 **/ private void bindSelectUseView( int selectLength) { selectTagUseView.setTagsByLength(selectLength, AllTagsSelect); selectTags.clear(); notSelectTags.clear(); for ( int i = 0 ; i < AllTagsSelect.size(); i++) { if (i < selectLength) { selectTags.add(AllTagsSelect.get(i)); //选中的存放入集合 selectTagUseView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow); } else { notSelectTags.add(AllTagsSelect.get(i)); //未选中的存放入集合 } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true ; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true ; } return super .onOptionsItemSelected(item); } } |
项目下载地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/a12a15a05/article/details/50344979