Как ввести цветной текст в EditText - PullRequest
3 голосов
/ 17 февраля 2012

Я хочу динамически менять цвет в EditText.А именно:

После того, как я нажал кнопку , текст, который я ввожу в EditText, превращается в красный цвет ; (текст, уже находящийся в EditText, остается его'original color)

После того, как я снова нажимаю кнопку , текст, который я ввожу в EditText, меняет другой цвет, а также цвет текста, который уже есть в EditText остается.

Ответы [ 4 ]

7 голосов
/ 17 февраля 2012

Вы также можете использовать следующий код для установки цвета текста вашего редактируемого текста

EditText et = (EditText) findViewById(R.id.edit1);
// to set text color using RGB code
et.setTextColor(Color.parseColor("#00ff00"));
3 голосов
/ 18 августа 2012

Используйте этот код:

Spannable spannable = youreditText.getText();
spannable .setSpan(new BackgroundColorSpan(Color.argb(a, r, g, b)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

Если вы не хотите, чтобы вставленный текст был цветным, но вы хотите, чтобы текст между цветными индексами просто использовал:

Spannable spannable = youreditText.getText();
spannable .setSpan(new BackgroundColorSpan(Color.argb(a, r, g, b)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Надеюсь, это поможет!

0 голосов
/ 18 февраля 2012

Я придумываю простое решение, используя тег типа HTML

ImageBtn.setOnClickListener(new OnClickListener() {     
    @override
    public void onClick(View view) {
    // TODO Auto-generated method stub
        mContentEdit.append("[1;34m [m");  //this is the tag I use
        //here I simplely append new tag to the end ,we can also add this tag where cursor is
    }
});

добавить TextWatcher для моего EditText;

    mContentEdit.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            switch(mInsertIndex){
            case 1:
                mSelection = mContentEdit.getSelectionStart();
                break;
            case 2:  
                mContentEdit.setSelection(mSelection);
                break;   //recover the cursor's position
            }
            }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            switch (mInsertIndex) {
            case 1:
                //this is p:Pattern p = Pattern.compile("\\[[\\d{1};]*(3\\d{1})m(.*?)\\[[\\d;]*m");
                Matcher m = p.matcher(s.toString());
                StringBuffer sb = new StringBuffer();
                while(m.find()){
                    m.appendReplacement(sb, "<font color=#"+CssUtil.getColor(m.group(1))+">"+"[1;"+m.group(1)+"m"+m.group(2)+"[m"+"</font>");
                } //add a tag otherwise the next time we input,color will be gone;
                m.appendTail(sb);
                mInsertIndex = 2;
                mContentEdit.setText(Html.fromHtml(sb.toString()));
                break;
                                    //replace tag by html color
            case 2:
                mInsertIndex = 1;
                break;
                                    //avoid recursive message loop
            }

        }

этот код хорошо работает для моего приложения. Я могу опубликовать необработанный текст в виде текста непосредственно на веб-сайте, и веб-сайт будет анализировать теги для цвета CSS;

Но есть еще дефект:

1: Что делать, если я не хочу видеть теги? В моем вопросе мне нужен фактически конечный автомат цвета, после нажатия которого, когда бы вы ни вводили, цвет будет иметь эффект. Но в моем решении я должен ввести теги.

2: С ростом длины ввода может возникнуть проблема с эффективностью; Как видите, используется регулярное выражение;

Итак, все еще с нетерпением жду героя, чтобы решить мою проблему!

0 голосов
/ 17 февраля 2012

Вы можете применить цвет к вашему тексту редактирования следующим образом:

yourEdiText.setTextColor(0xff0000ff);

и для конкретной ситуации вы должны поставить этот код.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...