EditText实现话题选择

来源:互联网 发布:苹果电脑数据恢复 编辑:程序博客网 时间:2024/06/05 04:33

微博话题可哟重复选择多个  但是优化之后每个话题只支持选择一次 禁止用户输入# 

删除的时候以话题为整体进行删除

/**
     * 给EditText设置删除监听事件
     *
     * @param v
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
            //当为删除键并且是按下动作时执行
            int selectionStart = etWriteSound.getSelectionStart() - 1;
            int lastPos = 0;
            for (int i = 0; i < topicBeanList.size(); i++) { //循环遍历整个输入框的所有字符
                if ((lastPos = etWriteSound.getText().toString().indexOf(topicBeanList.get(i).getTopicName(), lastPos)) != -1) {
                    if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + topicBeanList.get(i).getTopicName()
                        .length() - 1)) {
                        String sss = etWriteSound.getText().toString();
                        String currentStr = sss.substring(0, lastPos) + sss
                            .substring(lastPos + topicBeanList.get(i).getTopicName().length()); //字符串替换,删掉符合条件的字符串
                        topicBeanList.remove(i); //删除对应实体
                        topicMap.clear();
                        for (int j = 0; j < topicBeanList.size(); j++) {
                            if (currentStr.contains(topicBeanList.get(j).getTopicName())) {
                                topicMap
                                    .put(currentStr.indexOf(topicBeanList.get(j).getTopicName()), currentStr.indexOf(topicBeanList.get(j).
                                        getTopicName()) + topicBeanList.get(j).getTopicName().length());
                            }
                        }
//                   设置原有字符串的颜色
                        SpannableString spannableString = new SpannableString(currentStr);
                        for (Integer key : topicMap.keySet()) {
                            spannableString
                                .setSpan(new ForegroundColorSpan(Color.BLUE), key, topicMap.get(key), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                        etWriteSound.setText(spannableString);
                        etWriteSound.setSelection(lastPos); //设置光标位置
                        return true;
                    }
                } else {
                    lastPos += ("#" + topicBeanList.get(i).getTopicName() + "#").length();
                }
            }
        }
        return false;
    }


 添加的时候进行话题的遍历  将对应话题改变对应的颜色 设置点击事件等等

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (before == 0) {
            if (TextUtils.equals(s.subSequence(start, s.toString().length()), "#")) {
                etWriteSound.setText(s.subSequence(0, start));
                etWriteSound.setSelection(start);
                selectTopic();
            }
        }


    }


    @Override
    public void afterTextChanged(Editable s) {
        tvSoundWriteSize.setVisibility(View.VISIBLE);
        soundSize = 200 - s.length();
//        获取输入数据的长度 对长度进行限制
        tvSoundWriteSize.setText(String.valueOf(soundSize));
        if (soundSize < 0) {
            tvSoundWriteSize.setTextColor(Color.RED);
        } else {
            tvSoundWriteSize.setTextColor(Color.BLACK);


        }


    }

//                   设置原有字符串的颜色
                        SpannableString spannableString = new SpannableString(currentText + addTopic);
                        for (Integer key : topicMap.keySet()) {
                            spannableString
                                .setSpan(new ForegroundColorSpan(Color.BLUE), key, topicMap.get(key), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                        spannableString
                            .setSpan(new ForegroundColorSpan(Color.BLUE), currentText.length(), currentText.length() + addTopic.length(),
                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        etWriteSound.setText(spannableString);
                        topicBeanList.add(new TopicBean(addTopic, topicBean.getTopicId()));


                        etWriteSound.setSelection(etWriteSound.getText().toString().length());




0 0
原创粉丝点击