Set color of TextView span in Android

前端 未结 15 1495
眼角桃花
眼角桃花 2020-11-22 05:54

Is it possible to set the color of just span of text in a TextView?

I would like to do something similar to the Twitter app, in which a part of the text is blue. See

相关标签:
15条回答
  • 2020-11-22 06:26

    Just to add to the accepted answer, as all the answers seem to talk about android.graphics.Color only: what if the color I want is defined in res/values/colors.xml?

    For example, consider Material Design colors defined in colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="md_blue_500">#2196F3</color>
    </resources>
    

    (android_material_design_colours.xml is your best friend)

    Then use ContextCompat.getColor(getContext(), R.color.md_blue_500) where you would use Color.BLUE, so that:

    wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    

    becomes:

    wordtoSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.md_blue_500)), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    

    Where I found that:

    • Working with spans in Android – Michael Spitsin – Medium
    0 讨论(0)
  • 2020-11-22 06:26
    1. create textview in ur layout
    2. paste this code in ur MainActivity

      TextView textview=(TextView)findViewById(R.id.textviewid);
      Spannable spannable=new SpannableString("Hello my name is sunil");
      spannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5, 
      Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
      textview.setText(spannable);
      //Note:- the 0,5 is the size of colour which u want to give the strring
      //0,5 means it give colour to starting from h and ending with space i.e.(hello), if you want to change size and colour u can easily
      
    0 讨论(0)
  • 2020-11-22 06:27

    If you want more control, you might want to check the TextPaint class. Here is how to use it:

    final ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void onClick(final View textView) {
            //Your onClick code here
        }
    
        @Override
        public void updateDrawState(final TextPaint textPaint) {
            textPaint.setColor(yourContext.getResources().getColor(R.color.orange));
            textPaint.setUnderlineText(true);
        }
    };
    
    0 讨论(0)
  • 2020-11-22 06:28

    Here is a little help function. Great for when you have multiple languages!

    private void setColor(TextView view, String fulltext, String subtext, int color) {
        view.setText(fulltext, TextView.BufferType.SPANNABLE);
        Spannable str = (Spannable) view.getText();
        int i = fulltext.indexOf(subtext);
        str.setSpan(new ForegroundColorSpan(color), i, i + subtext.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    
    0 讨论(0)
  • 2020-11-22 06:31

    From the developer docs, to change the color and size of a spannable:

    1- create a class:

        class RelativeSizeColorSpan(size: Float,@ColorInt private val color: Int): RelativeSizeSpan(size) {
    
        override fun updateDrawState(textPaint: TextPaint?) {
            super.updateDrawState(textPaint)
            textPaint?.color = color
        } 
    }
    

    2 Create your spannable using that class:

        val spannable = SpannableStringBuilder(titleNames)
    spannable.setSpan(
        RelativeSizeColorSpan(1.5f, Color.CYAN), // Increase size by 50%
        titleNames.length - microbe.name.length, // start
        titleNames.length, // end
        Spannable.SPAN_EXCLUSIVE_INCLUSIVE
    )
    
    0 讨论(0)
  • 2020-11-22 06:32
    String text = "I don't like Hasina.";
    textView.setText(spannableString(text, 8, 14));
    
    private SpannableString spannableString(String text, int start, int end) {
        SpannableString spannableString = new SpannableString(text);
        ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{0xffa10901});
        TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);
    
        spannableString.setSpan(highlightSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new BackgroundColorSpan(0xFFFCFF48), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new RelativeSizeSpan(1.5f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
        return spannableString;
    }
    

    Output:

    0 讨论(0)
提交回复
热议问题