Android рдкрд░ рд╕реНрдЯреНрд░реЛрдХ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдмрдЯрди

рдЫрд╡рд┐
рдореБрдЭреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рдПрдХ рдмрдЯрди рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рдлрд╝реЙрдиреНрдЯ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рд╣реИ - Google рдХреЛ рдмрд╕ рдпрд╣ рдкреВрд░реНрд╡рд╛рднрд╛рд╕ рдХрд░рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЖрдк рдЗрд╕реЗ рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдмрдЯрди рд╣реБрдб рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╛рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреЛрдЬ рд╢реБрд░реВ рдХреАред
рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рдлреЙрдиреНрдЯ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╛рдХрд╛рдо рд░рд╣реЗрдЧреА -
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреА рд░реЗрдЦрд╛ рдЕрдзрд┐рдХ рдзреБрдВрдзрд▓реА рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЖрдк рдЫрд╛рдпрд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ;
рджреВрд╕рд░реА рдмрд╛рдд, рдЖрдк рд▓рд╛рдЗрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред
рдереЛрдбрд╝реЗ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХреМрди рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ - рдореИрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╣рд░ рдЬрдЧрд╣ рдЦреЛрдЬ рдХреА рдФрд░ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░, рд╢рд╛рдпрдж, рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ XML рд╕реЗ рдлрд╝реЙрдиреНрдЯ рд░рдВрдЧ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдЪреМрдбрд╝рд╛рдИ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереАред рдЕрдм рдХреЛрдб рдкрд░ рдЬрд╛рдПрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рд╛рдЗрд▓ рд░реЗрд╕ / рдорд╛рди / attrs.xml рдореЗрдВ, рд╣рдо рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ ButtonStrokeText рдмрдЯрди рдХреЛ рд▓реЗрдЧрд╛ (рдЪрд▓реЛ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ)ред
<? xml рд╕рдВрд╕реНрдХрд░рдг = "1.0" рдПрдиреНрдХреЛрдбрд┐рдВрдЧ = "utf-8" ?>
<рд╕рдВрд╕рд╛рдзрди >

<рдШреЛрд╖рдгрд╛-рдпреЛрдЧреНрдп рдирд╛рдо = "рдмрдЯрдирд╕реНрдЯреНрд░реЛрдХрдЯреЗрдХреНрд╕реНрдЯ" >
<attr рдирд╛рдо = "textStrokeColor" рдкреНрд░рд╛рд░реВрдк = "рд░рдВрдЧ" />
<attr рдирд╛рдо = "textStrokeWidth" рдкреНрд░рд╛рд░реВрдк = "рдЖрдпрд╛рдо" />
</ рдШреЛрд╖рдгрд╛-рдпреЛрдЧреНрдп >

</ рд╕рдВрд╕рд╛рдзрди >


рд╣рдо textStrokeColor рд╕реНрдЯреНрд░реЛрдХ рд░рдВрдЧ рдХреЛ рд░рдВрдЧ рдкреНрд░рд╛рд░реВрдк (рд╕рд╛рде рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рд░рдВрдЧ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рд╕реНрдЯреНрд░реЛрдХ рдХреА рдЪреМрдбрд╝рд╛рдИ рдмрдирд╛ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдпрд╛рдореЛрдВ (рд╕рдкрд╛, рдбреАрдкреА рдФрд░ рд╕рднреА рдореЗрдВ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ google рдЯреЗрдХреНрд╕реНрдЯ рд╕рд╛рдЗрдЬ рдХреЗ рд▓рд┐рдП sp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред

рддреЛ, XML рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЪрд▓реЛ рдЦреБрдж ButtonStrokeText рд╡рд░реНрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдЯрди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдФрд░ рдПрдХ onDraw рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреЛрдб рд╣реА рд╣реИ:

рдЖрдпрд╛рдд android.content.Context ;
рдЖрдпрд╛рдд android.content.res.ypedArray ;
import android.graphics.Canvas ;
рдЖрдпрд╛рдд android.graphics.Color ;
рдЖрдпрд╛рдд android.graphics.Paint.Join ;
рдЖрдпрд╛рдд android.graphics.Paint.Style ;
рдЖрдпрд╛рдд android.text.TextPaint ;
рдЖрдпрд╛рдд android.util.AttributeSet ;
рдЖрдпрд╛рдд android.widget.Button ;


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ ButtonStrokeText рдмрдЯрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
{
рдирд┐рдЬреА рдЗрдВрдЯ рд╕реНрдЯреНрд░реЛрдХрд░реЛрд▓ = рд░рдВрдЧ ред рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрдЯ ;
рдирд┐рдЬреА рдЗрдВрдЯ рд╕реНрдЯреНрд░реЛрдХрд╡реАрдб = 2 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ButtonStrokeText ( рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн )
{
рд╕реБрдкрд░ ( рд╕рдВрджрд░реНрдн ) ;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ButtonStrokeText ( рд╕рдВрджрд░реНрдн рдкреНрд░рд╕рдВрдЧ, рдЧреБрдгрд╕рдВрдЧреНрд░рд╣ )
{
рд╕реБрдкрд░ ( рд╕рдВрджрд░реНрдн, рдЧреБрдг ) ;
рдЯрд╛рдЗрдкрд░рдЕрд░реЗ = рдПрдХ рд╕рдВрджрд░реНрднред getStyledAttributes ( attrs , R. styleable ред ButtonStrokeText ) ;
stroColor = рдПред getColor ( R. styleable ред ButtonStrokeText_textStrokeColor , stroColor ) ;
stroWidth = рдПред getDimensionPixelSize ( R. styleable ; ButtonStrokeText_textStrokeWidth , stroWidth ) ;
рдПрдХред рд░реАрд╕рд╛рдпрдХрд▓ ( ) ;
}
рдЕрд╡рд╣реЗрд▓рдирд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп onDraw ( рдХреИрдирд╡рд╛рд╕ рдХреИрдирд╡рд╛рд╕ )
{
рдЕрдВрддрд┐рдо ColorStateList textColor = getTextColors ( ) ;

рдЯреЗрдХреНрд╕реНрдЯрдкреЗрдВрдЯ рдкреЗрдВрдЯ = рдпрд╣ ред getPaint ( ) ;

рдкреЗрдВрдЯред рд╕реЗрдЯ рд╕реНрдЯрд╛рдЗрд▓ ( рд╕реНрдЯрд╛рдЗрд▓ ред STROKE ) ;
рдкреЗрдВрдЯред setStrokeJoin ( Joinред ROUND ) ;
рдкреЗрдВрдЯред setStrokeMiter ( 10 ) ;
рдпрд╣ ред setTextColor ( stroColor ) ;
рдкреЗрдВрдЯред setStrokeWidth ( stroWidth ) ;

рд╕реБрдкрд░ ред onDraw ( рдХреИрдирд╡рд╛рд╕ ) ;
рдкреЗрдВрдЯред рд╕реЗрдЯ рд╕реНрдЯрд╛рдЗрд▓ ( рд╕реНрдЯрд╛рдЗрд▓ ред рдлрд╝реАрд▓ ) ;

setTextColor ( textColor ) ;
рд╕реБрдкрд░ ред onDraw ( рдХреИрдирд╡рд╛рд╕ ) ;
}
}


рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдмрдЯрдирд╕реНрдЯреНрд░реЛрдХрдЯреЗрдХреНрд╕реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн, рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯрд╕реЗрдЯ рдПрдЯрд░реНрд╕) рдореЗрдВ рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВред GetColor рдФрд░ getDimensionPixelSize рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ XML рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдЙрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдореЗрдВ, рд╣рдо рдмрд╕ рдПрдХ рд╕реНрдЯреНрд░реЛрдХ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реЗрдЯрд╕реНрдЯреНрд░реЛрдХрдЬреЗрди рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЧреЛрд▓ рдЪреБрдирд╛ред рдЪрд┐рддреНрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдЯреНрд░реЛрдХ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдзреНрдпрд╛рди рд╕реЗ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдФрд░ рдХреЛрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ)ред рдЖрдк рдЪрд┐рддреНрд░ рдореЗрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдЕрдм рдЖрдк рдЕрдкрдиреЗ XML рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгред

  1. <com.unlim.complds.ButtonStrokeText Android: text = "@ string / menu_quit"
  2. Android: textColor = "android: color / white"
  3. app: textStrokeWidth = "5sp" рдРрдк: textStrokeColor = "android: color / black"
  4. Android: textSize = "20sp" android: layout_width = "220dip"
  5. Android: layout_height = "40dip" Android: рд▓реЗрдЖрдЙрдЯ_рдЧрд░реНрднрд╛рд╡рд╕реНрдерд╛ = "рдХреЗрдВрджреНрд░_рд╣реГрджрдп" />


рдЦреИрд░, рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкрддреНрдерд░ рдлреЗрдВрдХрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛ред рд╕рдордЭрдиреЗ рдХреА рдЖрд╢рд╛ рдХреЗ рд╕рд╛рдеред

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


All Articles