Android рдкрд░ RichText рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред Spannable

рд╣рд╛рдп рд╣реЗрдмреНрд░рд╕реНрддреЛрд╡реЛ! рдпрд╣ рд▓реЗрдЦ Android рдореЗрдВ Spannable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рдкрд╛рда рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП:



рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред


рд╕рд┐рджреНрдзрд╛рдВрдд


рд╕реНрдкреИрдирдмрд▓ рдПрдХ рдРрд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджреЗ рдкрд╛рда рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХрд╛рд░реНрдп рдкрд╛рда рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрд╛рдЧ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реИрд▓реА рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реИред рдпреЗ рдЯреИрдЧрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ ParcelableSpan рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрдХрди рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:

Spannable.setSpan(Object span, int start, int end, int flags); 

рд╣рдЯрд╛рдиреЗ, рдХреНрд░рдорд╢рдГ, рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛:

 Spannable.removeSpan(Object span); 

рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИрдВ, рдЪрд▓рд┐рдП рд╕реАрдзреЗ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЕрднреНрдпрд╛рд╕


рдЕрднреНрдпрд╛рд╕ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдореМрдЬреВрджрд╛ рдПрдХ рдХреЛ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рдореИрдВрдиреЗ рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ TextView рд░рдЦрд╛ред рд╣рдо рдЙрд╕ рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ TextView (I onCreate ) рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:

 // Create spannable text and set style. Spannable text = new SpannableString("This is underline and bold text."); text.setSpan(new UnderlineSpan(), 8, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); text.setSpan(new StyleSpan(Typeface.BOLD), 22, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // Set spannable text in TextView. TextView textView = (TextView) findViewById(R.id.text); textView.setText(text); 

рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред SpannableString - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ Spannable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред UnderlineSpan - ParcelableSpan рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдкрд╛рда рдХреЗ рднрд╛рдЧ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ 8 рд╡реЗрдВ рд╕реЗ 17 рд╡реЗрдВ рдЕрдХреНрд╖рд░ рддрдХ рд╣реИ)ред Spanned.SPAN_EXCLUSIVE_EXCLUSIVE рдзреНрд╡рдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рд╣реНрдирд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдИрдВ рдпрд╛ рджрд╛рдИрдВ рдУрд░ рдкрд╛рда рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЕрд╡рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред (рд╕рднреА рдЭрдВрдбреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ; рдЬрдм рдкрдардиреАрдп рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЗрддрдиреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред

рдпрд╣рд╛рдБ рднреА рд╣рдордиреЗ ParcelableSpan рдХреЗ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ - рд╕реНрдЯрд╛рдЗрд▓рд╕реНрдкреИрди ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмреЛрд▓реНрдб ( рдЯрд╛рдЗрдкрдлреЗрд╕.рдмреЙрд▓реНрдб ) рдпрд╛ рдЗрдЯреИрд▓рд┐рдХ ( рдЯрд╛рдЗрдкрдлреЗрд╕ ) рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ, рд╣рдо рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдкрд╛рда рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:



рдареАрдХ рд╣реИ, рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рда:

 // Create spannable text and set style. Spannable buttonText = new SpannableString("Italic text"); buttonText.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // Set spannable text in TextView. Button button = (Button) findViewById(R.id.button); button.setText(buttonText); 

рдЗрд╕ рдмрд╛рд░ рд╣рдо рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдЗрдЯреИрд▓рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВред



рд╣рдо рдмрдЯрди рдкрд░ рд╕реНрдЯрд╛рдЗрд▓ рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рдЖрдЧреЗ рднреА рдЪрд▓рддреЗ рд╣реИрдВ, рдмрдЯрди рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦреЗрдВ:

 Spannable text = new SpannableString("Italic green text in toast"); text.setSpan(new StyleSpan(Typeface.ITALIC), 0, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); text.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд╣реИ - рдлрд╝реЛрд░рдЧреНрд░рд╛рдЙрдВрдбрд░рдХреНрд▓реЛрд░рд╕реНрдкреИрди , рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рда рдХрд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рд╣рд░рд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓рд╕реНрдкреИрди рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред



рд╣рдо рдЯреЛрд╕реНрдЯ рдореЗрдВ рднреА рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдП рдЧрдП рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рд╛рдорд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╣рдордиреЗ рдпрд╣ рднреА рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдкрд╛рда рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЖрдк рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ , рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рдерд╛, рдЬреЛ рдЗрд╕рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ рдпрд╛ рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЬреАрдердм рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕реНрд░реЛрдд ред

Source: https://habr.com/ru/post/In167343/


All Articles