服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android TagCloudView云标签的使用方法

Android TagCloudView云标签的使用方法

2022-02-27 16:27兔子吃过窝边草 Android

这篇文章主要为大家详细介绍了Android TagCloudView云标签的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。

先看效果图:

Android TagCloudView云标签的使用方法

这两天做了一个项目,需求如同置前标签,然后就对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

延伸 · 阅读

精彩推荐