è¬çŸ©ãé«åºŠãªUIãã¯ãã¢ãã€ã«Yandex.MailããŒã ã®éçºè ã§ããDmitry Svirikhinã«ãã£ãŠè¡ãããŸããã Dmitryã¯ãAndroidã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãéçºããéã«æãäžè¬çãªåé¡ã解決ããæ¹æ³ã説æããŸãã
ãããã¯ã«é¢ããäžèšã®ãã¹ãŠãèŠçŽããŸãããã ããŒãã䜿çšããŠçµ±äžãããUIèŠçŽ ãã¹ã¿ã€ã«ããå¿ èŠããããŸãããããã¯å šäœãæåããèšè¿°ããå¿ èŠã¯ãããŸãããã·ã¹ãã ããŒãããç¶æ¿ãããã®ããŒãã®å±æ§ã®ãµãã»ãããæåã«èšå®ã§ããŸãã
-ä»æãMobilization Schoolã§å匷ããŠããŸããããä»æã¯UIãå«ãå€ãã®ããšãåŠã³ãŸããã ä»æ¥ã¯ãããªãããã§ã«åŠã¹ãããšãããã€ãæããã«ãããŸãäœãæ°ããããšãäŒããããšããŸãã é¢çœããã®ã«ãªãããšãé¡ã£ãŠããŸãã
ç§ã®è¬çŸ©ã¯2ã€ã®ããŒãã§æ§æããããã®äžã§ãŸãäœããã®åé¡ãæèµ·ãã次ã«ããã解決ããæ¹æ³ãæ¢ããŸãã

ä»æ¥èª¿æ»ããåé¡ãèŠãŠã¿ãŸãããã
æåã«ãã¢ããªã±ãŒã·ã§ã³ã®UIã®äžäžèŽã®åé¡ãšããã®äžäžèŽã解決ããæ¹æ³ãèŠãŠãããŸãã
第äºã«ãAndroidéçºã®ããªã倧ããªåé¡ã®1ã€ã¯ãããŒããŒããšã®çžäºäœçšã§ãã ããŒããŒããç»é¢ã«è¡šç€ºããããšãã®å¯ŸåŠæ¹æ³ãããŒããŒããšã®äœµçšæ¹æ³ã
第äžã«ãã«ã¹ã¿ã ãã¥ãŒãå¹æçã«é©çšããæ¹æ³ãæ€èšããŸãã è¬çŸ©ã®1ã€ã«æ¢ã«åæ ŒããŠãããã«ã¹ã¿ã ãã¥ãŒãäœæããæ¹æ³ãããã«ã©ã®ãããªèŠåããããã倧ãŸãã«æ³åããŠãã ããã ããããä»æ¥ã¯ãã®ãããã¯ãå°ãéããè«ççã«ç¶ããŸãã ãŸããå¯èœãªå Žåã®ç¶æ ã®æ倱ã«ã€ããŠãå°ã調ã¹ãŸãã ãã¡ãããã¢ã¯ãã£ããã£ãåäœæãããšãã«ç¶æ ã倱ãå¯èœæ§ãããå Žåã®åäœæ¹æ³ãæ¢ã«ç¥ã£ãŠããŸãã ãã³ãã«ã«ããã€ãã®ãã®ãä¿åãããããã䜿çšããŠã¢ã¯ãã£ããã£ãåäœæããå¿ èŠããããŸãã
ããã§ããåé¡ãçºçããå ŽåããããŸãããä»æ¥ã¯ããããã¹ãŠã®åé¡ãèæ ®ã«å ¥ããŸãã
ãŸããUIã®ã€ã³ã¿ã©ã¯ãã£ãæ§ã®æ¬ åŠã®åé¡ãæ€èšããUIãããã€ã³ã¿ã©ã¯ãã£ãã«ãããŠãŒã¶ãŒãè¡ãããã€ãã®ã¢ã¯ã·ã§ã³ã«ç解ã§ããããã«å¿çããæ¹æ³ã確èªããŸãã
æåããå§ããŸããã-ççŸã«ã€ããŠã

UIã®äžæŽåã«ã¯ããã€ãã®çš®é¡ããããŸãã ãŸããAndroidã®ããŸããŸãªããã€ã¹ã§UIã«äžè²«æ§ããªãå ŽåããããŸãã ããšãã°ãç°ãªãããã€ã¹ã§åããã¥ãŒãç°ãªãå ŽåããããŸãã Androidã«ã¯ããªãå€ãã®ããã€ã¹ãæèŒãããŠããããšã¯ãåç¥ã®ããšãšæããŸãããã®ãããAndroidã®ããŒãžã§ã³ããšã«æçåãããªãé²ãã§ããŸãã ãããã£ãŠãAndroid 4 UIã§ã¯äžèŠãAndroid 5ã§ã¯å¥ã®èŠãç®ã«ãªããŸãã ããã«ãããããã€ã¹éã§UIã®äžæŽåãçºçããŸãã

ããããããã¯ããããäž»ãªåé¡ã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã®UIã«äžæŽåãçããå¯èœæ§ãããããã§ããç°ãªãç»é¢ã§ç°ãªãè²ã®ããŒã«ããŒã䜿çšããããããŒã«ããŒã䜿çšããè²ãšçµã¿åãããããšãã§ããªãå ŽåããããŸããç»é¢ã®å·Šã«ã¹ã¯ããŒã«ããããã²ãŒã·ã§ã³ããã¯ãŒã§ã ãããŠããã®åé¡ã解決ããªããã°ãå°ãªããšããã®è§£æ±ºçãå€§å¹ ã«ç°¡çŽ åããæ¹æ³ããããŸãã
ãããã¯ããŒããšã¹ã¿ã€ã«ã§ãã

ããããå§ããŸãã ãããŠãæåã«ãããã¯ãäœã§ããããå€æããŸãããã
ããŒãã¯ãAndroidã®UIå šäœã®äžçš®ã®ã°ããŒãã«æ§æã§ãã ããŒãã®å±æ§ã«ã¯ãããšãã°ãUIå šäœã®æ§ç¯ã«é¢é£ããäœããã®çš®é¡ã®ãŠã£ã³ããŠãã°ãUIã®æ§ç¯ã«ã䜿çšããã°ããŒãã«ãªè²ãšç»åãåã ã®ãã¥ãŒãšãµããããã¯ã®ã¹ã¿ã€ã«å šäœãªã©ãå«ãŸããŸããããšãã°ããã€ã¢ãã°ã®å Žåã
ãããã¯ã«ã¯çŽ300åã®å±æ§ããããããã«å€ãã®å±æ§ããããŸããããããã¯ãå®çŸ©ãããšãã300åãã¹ãŠã®å±æ§ãåå®çŸ©ããå¿ èŠã¯ãããŸãããåã«ãããè¡ãã¹ãã§ã¯ãããŸããã ãããè¡ãããã«ããã©ãããã©ãŒã ã¯ãäœããã®æ¢æã®ã·ã¹ãã ããŒãããç¶æ¿ããå¿ èŠãªãã®ãåå®çŸ©ããå¿ èŠããããããªæ¹æ³ãæäŸããŸãã
ç¶æ¿ã§ãããããã¯ãèŠãŠã¿ãŸãããã
æåã¯ããµããŒãã©ã€ãã©ãªã®äžéšã§ããAppCompatã©ã€ãã©ãªãæ¥ç¶ãããã®ã©ã€ãã©ãªã§æ¢ã«æäŸãããŠããããŒãã®ããã€ãããç¬èªã®ããŒããç¶æ¿ããã®ãæé©ã§ãã ãããã£ãŠãæãUIãäœæããã«ã¯Theme.AppCompatãå¿ èŠã§ãæããUIãäœæããã«ã¯Theme.AppCompat.Lightãå¿ èŠã«ãªãå ŽåããããŸãã ãããŠããããå®è¡ããåŸ-ãããã®äºåå®çŸ©ããããããã¯ã®1ã€ããç¬èªã®ããŒããç¶æ¿ããŸã-ããŸããŸãªããã€ã¹ã§ã®UIã®äžæŽåã®åé¡ã¯ãã§ã«è§£æ±ºãããŠããŸãã 4çªç®ã5çªç®ãããã³ãã以éã®Android UIã®ãŠãŒã¶ãŒã¯åäžã§ã¯ãªããããããŸããããéåžžã«ãã䌌ãŠãããç°ãªãããã€ã¹ã§ã®äžæŽåã®åé¡ã¯ãã§ã«è§£æ±ºãããŠããŸãã
ãã®ãããäœããã®ã·ã¹ãã ããç¶æ¿ããç¬èªã®ããŒããäœæããŸããã 次ã«äœãããå¿ èŠããããŸããïŒ

ããŒãå±æ§ã®ç¹æ§ã¯ããã¹ãŠã®å éšããŒããšã¹ã¿ã€ã«ãäœããã®åœ¢ã§äºãã«çµã³ã€ããŠããããšã§ããæåã«ãå±æ§ã®ãµãã»ãããããã€ãã®åºæ¬çãªå±æ§ãå®çŸ©ããå¿ èŠããããŸãã ã¹ã©ã€ãäžã«è¡šç€ºãããŸãã ãããã®ããããã«å¯ŸåŠããŸãããã

ãŸããwindowBackgroundãã¹ã©ã€ãäžã§ãæå®ãããç°ãªãèæ¯ã§ã¢ããªã±ãŒã·ã§ã³ã®å€èŠ³ãã©ã®ããã«å€åãããã確èªã§ããŸãã windowBackgroundã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã®èæ¯ãèšå®ããã ãã§ãwindowBackgroundãã©ã¡ãŒã¿ãŒã«æž¡ããè²ãŸãã¯ãããŠã¢ãã«ãããã¹ãŠã®ãã¥ãŒãæç»ããããŠã£ã³ããŠã®èæ¯ãšããŠèšå®ããŸãã

colorPrimaryãcolorPrimaryDarkãªã©ã®ãªãã·ã§ã³ããããŸãã ãããã®ååããããããã¯éåžžã«éèŠãªãã©ã¡ãŒã¿ãŒã§ãããšæããããããããŸããããå®éã«å¿ èŠãªã®ã¯ãããŒã«ããŒãšã¹ããŒã¿ã¹ããŒã«ããã€ãã®è²ãèšå®ããããšã ãã§ãã ã¢ã¯ã·ã§ã³ã¢ãŒãã«åãæ¿ãããšãåãããŒã«ããŒã§äœ¿çšããããšãã§ããŸãã ãããã®å±æ§ã䜿çšãããšãããŒã«ããŒãšã³ã³ãã³ãã®éã®åºåããè²ä»ããããŸãã

ãããã£ãŠãããã«èå³æ·±ãå±æ§ã§ããcolorAccentã«é²ã¿ãŸãã ååã瀺ãããã«ãUIã®éèŠãªéšåã«ãŠãŒã¶ãŒãéäžãããããã«å¿ èŠã§ãã äœã ããïŒ ããšãã°ãFloatingActionButtonããŠãŒã¶ãŒãçŸåšç·šéããŠããç·šéããã¹ããéžæãããã§ãã¯ããã¯ã¹ãªã©ã§ãã

colorControlNormalã¯ãéã¢ã¯ãã£ãç¶æ ã®UIèŠçŽ ã®è²ã決å®ããŸãã éã¢ã¯ãã£ããªç¶æ ãšã¯ãããšãã°ããã©ãŒã«ã¹ã®ãªãç·šéããã¹ãããŸãã¯éžæãããŠããªããã§ãã¯ããã¯ã¹ãªã©ãæå³ããŸãã

å察ã«ãcolorControlActivatedã¯ããã©ãŒã«ã¹ãããç·šéããã¹ãã®è²ãéžæããããã§ãã¯ããã¯ã¹ãªã©ã決å®ããŸããååãšããŠãcolorAccentã«é¢é£ä»ããããŠããããããã®å±æ§ãåå®çŸ©ããå¿ èŠã¯ãããŸãããå¿ èŠã§ã¯ãããŸããããããã§ãã圌ã«ã€ããŠç¥ãããšã¯æçšã§ãã

colorControlHighlightã¯ããã¥ãŒãã¿ãããããšãã«åŒ·èª¿è¡šç€ºããè²ãå®çŸ©ããŸãã å®éãããã¯ãã¥ãŒãã¿ããããŠãã°ããåŸ ã€ãšè¡šç€ºãããæ³¢çŽã®è²ãšåãã§ãã
ãã®ãããªçŸããå¹æãåŸãã«ã¯ããã®è²ãã¢ã«ãã¡ãã£ã³ãã«ã«èšå®ããå¿ èŠãããããšã«æ³šæããŠãã ããã

ãã¿ã³ãªã©ãã¹ã¿ã€ãªã³ã°ã«å¿ èŠãªå±æ§ã®ãªã¹ãããããŸã-ããã¯colorButtonNormalã§ãã ãã¿ã³ããããã¯ã¬ã€ãã§ãŸã å°ãç°ãªã£ãŠããããã以åã«æ€èšããcolorControlNormalå±æ§ã®åœ±é¿ãåãããåå¥ã®å±æ§ãèãåºããŸããã
ãŸããããšãã°ãã¹ã€ããã«ãåæ§ã®å±æ§ããããŸãã ãããã£ãŠãcolorControlNormalã®ãããªå±æ§ãèšå®ãããšãã«ãäœãããã€ã³ããããŠããªããŠãåé¡ã§ã¯ãããŸããããããããåé¡ã解決ããã®ã«åœ¹ç«ã€ããã€ãã®å±æ§ããããŸãã

ãããŠããã©ã¡ãŒã¿ã«ã€ããŠãããã¹ãã«ã€ããŠå°ã話ãããŸãã
ã·ã¹ãã ã«ã¯ãtextColorPrimaryïŒã¢ããªã±ãŒã·ã§ã³ããã¹ãã®ã¡ã€ã³ã«ã©ãŒïŒãtextColorHighlightãªã©ã®ãã©ã¡ãŒã¿ãŒããããããã¹ãéžæã®ã«ã©ãŒã決å®ããŸãã äžè¬ã«ãããã¹ãã«é¢é£ä»ããããŠãããã©ã¡ãŒã¿ãŒã®æ°ã¯éåžžã«å€ããç¹å®ã®ãã©ã¡ãŒã¿ãŒïŒããã¹ãã®è²å±æ§ïŒãã·ã¹ãã ã®å€ãã®ãã¥ãŒã«ã©ã®ããã«åœ±é¿ããããããã«æšæž¬ã§ãããšã¯éããªãããã2ã€ã®ãªãã·ã§ã³ããããŸãã textColorPrimaryãã©ã¡ãŒã¿ãŒãæ©èœããªãã£ãå Žåã¯ãå¿ èŠãªããã¹ãã®å±æ§ãçµéšçã«æ±ºå®ããããAppCompatã©ã€ãã©ãªã«ã¢ã¯ã»ã¹ããŠããã¥ãŒãæçµçã«ã©ã®è²ã«äŸåãããã確èªã§ããŸãã

ããŒãã®è²ãèšå®ããåæã«ã¬ã€ã¢ãŠãã®ãã¹ãŠã®ãã¥ãŒã®èæ¯ãäžè¬çã«ãã€ã³ããããããšãå®éã«ã©ã®ããã«èµ·ããããèããŠã¿ãŸãããã å®éãããã¯æ¬¡ã®ããã«èµ·ãããŸããããã«ã¯éæ³ã¯ãããŸããã
æåã¯ãã·ã¹ãã ã«ã¯éåžžé»ã®ãããããããå«ãŸããŠããããæ°ããAndroidã§ã¯ãã¯ãã«ã䜿çšããŠèšå®ãããã»ã¬ã¯ã¿ãŒã¯ãã®ãã¥ãŒã®æ¿æ·¡ã®åœ¢ã§ããã«ãã€ã³ããããŸãã ããšãã°ããã§ãã¯ããã¯ã¹ã®å Žåããã®ãããªã»ã¬ã¯ã¿ãŒã¯ã¹ã©ã€ãã«è¡šç€ºãããããã«ã¢ã¿ããã§ããŸããããã¯ãCheckedç¶æ ã§ã¯ãã¥ãŒã®èæ¯ãcolorControlActivatedå±æ§ã§æå®ãããè²ã§çè²ããå¿ èŠãããããšã瀺ããŸãã ãããã£ãŠããã¥ãŒïŒãã®å Žåã¯ãã§ãã¯ããã¯ã¹ïŒãCheckedå±æ§ãåãå ¥ããå Žåããã®è²ã§ãã€ã³ããããŸãã ããã¯ãcolorControlActivatedã®äžã«é»è²ãèšå®ããå Žåã®ãã§ãã¯ããã¯ã¹ã®å€èŠ³ã§ãã

ãããŠãå±æ§ã«ã€ããŠæ³šæãã¹ããã1ã€ã®éèŠãªç¹-ã¬ã€ã¢ãŠãã§çŽæ¥åç §ã§ããŸãã éå±€å ã®ã¬ã€ã¢ãŠãã«ããªãã«å¹æãå ããããšãã«ã¹ã©ã€ãã«è¡šç€ºãããæãäžè¬çãªæ¹æ³ã次ã«ç€ºããŸãã selectableItemBackgroundã®èæ¯ãæå®ããã ãã§ããã®ãã¬ãŒã ã¬ã€ã¢ãŠããã¿ãããããšããªããã«ã衚瀺ãããŸãã ããã¯Android 5以éã§äœ¿çšãããAndroid 4ã§ã¯ã¿ããããã ãã§èæ¯ãå€æŽãããŸãã

ãããã¯ã«é¢ããäžèšã®ãã¹ãŠãèŠçŽããŸãããã ããŒãã䜿çšããŠçµ±äžãããUIèŠçŽ ãã¹ã¿ã€ã«ããå¿ èŠããããŸããããŒãå šäœãæåããèšè¿°ããå¿ èŠã¯ãããŸãããäžéšã®ã·ã¹ãã ããŒãããç¶æ¿ãããã®ããŒãã®å±æ§ã®ç¹å®ã®ãµãã»ãããæåã«èšå®ã§ããŸãã
次ã«ãããã§ååã§ãªãå Žåã¯ãç®çã®çµæãéæããããã«ãããã€ãã®ä»ã®å±æ§ãåå¥ã«å€æŽã§ããŸãã ãŸããå¿ èŠã«å¿ããŠãã¬ã€ã¢ãŠãã§å±æ§ãçŽæ¥äœ¿çšã§ããŸãã
ããã§ããããã¯ã®æžãæ¹ãèŠã€ããŸããã ã©ãã§äœ¿çšã§ãããèŠãŠã¿ãŸãããã androidïŒthemeå±æ§ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãšã¢ã¯ãã£ããã£ã®ããŒãããããã§ã¹ãã§çŽæ¥èšå®ã§ããŸãã ãããã®åã±ãŒã¹ããã€äœ¿çšã§ããŸããïŒ ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããšãã°ã©ã€ãããŒããèšå®ã§ããŸãã çŸåšã§ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãæããããŒãã§è¡šç€ºãããããšããããããŸãã åæã«ãæãè²ã®ã®ã£ã©ãªãŒãäœãã®ã¯éåžžã«ãã¡ãã·ã§ããã«ã§ãã ãããã£ãŠãã¡ã€ã³ããŒããèšå®ããŠãããã®ã£ã©ãªãŒã衚瀺ããã¢ã¯ãã£ããã£ã§åå¥ã«èšå®ããããšãã°æãããŒããäœæã§ããŸãã
ããããä»ã®ç¶æ³ããããŸãã

ããã«ããã€ãã®ã¬ã€ã¢ãŠããããã®ã§ãããã©ã«ãã®ããŒãã§èŠããŸãã äžè¬çã«ããã¹ãŠãæªãããã§ã¯ãããŸããããç§ãã¡ã¯ããã奜ãã§ã¯ãããŸããã ç§ãã¡ãŸãã¯ç§ãã¡ã®ãã¶ã€ããŒã¯ãå°ãç°ãªããããã¯ãæãã§ããŸã-圌ã¯ããŒã«ããŒããšãŠãæããããã§ãã ã¢ããªã±ãŒã·ã§ã³ã®äž»èŠéšåã§æããããŒãã䜿çšããŠããããšãããããŸãã-ããã¯æãããã¹ãã®æããèæ¯ã§ãããããŒã«ããŒã¯çªç¶æãããŒããšæããããã¹ãã«ãªããŸããã
ãããè¡ãããã«ãAndroidã¯ãã¥ãŒã¬ãã«ã§ããŒããèšå®ããæ©èœãæäŸããŸããã ãã¥ãŒã¬ãã«ã§ãããã¯ãèšå®ãããšã©ããªããŸããïŒ ãã¥ãŒã§èšå®ãããã®ãããã¯ã§æå®ãããå±æ§ã¯ãããããããã®ãã¥ãŒã衚瀺ãããã¢ã¯ãã£ããã£ã®äž»ãªå±æ§ããªãŒããŒã©ã€ãããŸãã

ãã®ããã«ãã·ã¹ãã ã¯ããããThemeOverlayãæäŸããŸãããã®ããŒãããç¬èªã®ããŒããç¶æ¿ãããã¥ãŒã«è»¢éããŸãããŸããAppCompatã©ã€ãã©ãªã䜿çšãããšã䜿çšå¯èœãªãã®ã®ãªã¹ããæ¢ã«ãããŸããç¶æ¿ã§ããŸãã ãããã£ãŠãThemeOverlay.AppCompat.Lightã¯ãéå±€ã®äžéšãæãããŒãããæããããŒãã«åå®çŸ©ããThemeOverlay.AppCompat.Dark-éã«æããããŒãããæãããŒãã«åå®çŸ©ããããã«èšèšãããŠããŸãã ActionBarããã³DarkActionBarçšã®ãªãŒããŒã¬ã€ããã§ã«çšæãããŠããŸãã åè¿°ã®äŸã§ã¯åŸè ã䜿çšããå¿ èŠããããŸãã

ã§ã¯ããã®ç¶æ³ãèŠãŠã¿ãŸãããã ãã¥ãŒã¬ãã«ã§èšå®ããããŒããšã¹ã¿ã€ã«ã®éãã¯äœã§ããïŒ ã¹ã¿ã€ã«ãäœã§ããããç¥ã£ãŠãããããããè€æ°å䜿çšããŠãããšæããŸãããã®éå±€ã®ãã¥ãŒBã«ããã€ãã®ã¹ã¿ã€ã«ãå®çŸ©ãããšããŸãããã ãã®å Žåã¯ã©ããªããŸããïŒ ãã®ã¹ã¿ã€ã«å ã«ãããã¹ãŠã®å±æ§ã¯ããã¥ãŒBã®ã¿ã«äœçšããŸãã
ãã¥ãŒBã®ããŒããèšå®ããå Žåãã©ããªããŸããïŒ ãã®ãããã¯ã®ãã¹ãŠã®ã°ããŒãã«å±æ§ã¯ãBã ãã§ãªãããã®ãã¹ãŠã®åïŒãã®å Žåã¯DãšEïŒã«ãéå±€å šäœã«åœ±é¿ããŸãã ããããDãšEã«ä»ã®åãããå Žåããããã¯ããããã«æ¡åŒµãããŸãã
ãã¥ãŒBã®ã¹ã¿ã€ã«ãšããŒãã®äž¡æ¹ãèšå®ãããšã©ããªããŸããïŒ äžè¬çã«ãã¹ãŠãéåžžã«æ確ã§ãã ã¹ã¿ã€ã«ã¯ãã®ãã¥ãŒBã«ãé©çšãããããŒãã¯Bãšãã®ãã¹ãŠã®åã«æ¡åŒµãããŸãã
次ã«ããã¥ãŒã¬ãã«ã§èšå®ã§ããã¹ã¿ã€ã«ãšããŒãã®éããæ£åŒã«æ±ºå®ããŸãã ãã®ã¹ã¿ã€ã«ã¯ããã®ã¹ã¿ã€ã«ãå®çŸ©ããç¹å®ã®ãã¥ãŒã«ã®ã¿é©åãªå±æ§ã®ãµãã»ãããæå®ããããã«èšèšãããŠããŸãã ããšãã°ãã¹ã¿ã€ã«ã«TextViewãTextAppearanceå±æ§ããŸãã¯Backgroundãèšå®ãããšãã¹ã¿ã€ã«ã«å«ãŸããããšããããŸãã ããã¯ãããã¯ã®éåžžã®äŸã§ãã äžè¬çã«ãããŒãã¯ããšããšåããã¥ãŒã®éè€ãæé€ã§ããããã«æå³ãããŠããŸããã ãã¥ãŒã«ããŒããèšå®ããå Žåããã®ããŒããèšå®ããéå±€å šäœã®äžéšã®ã°ããŒãã«å±æ§ãåå®çŸ©ããããã«èšèšããå¿ èŠããããŸãã
ãããã¯ã«ã¯ãåè¿°ã®colorControlNormalãªã©ã®å±æ§ãå«ãŸããå ŽåããããŸãã

TextAppearanceãšåŒã°ããå¥ã®ã¿ã€ãã®ã¹ã¿ã€ã«ããããŸããããã¯ãããã¹ãã®ã¿ã«é¢é£ä»ããããŠããå€ãã®å±æ§ãå®çŸ©ããããã«èšèšãããŠããŸãã è²ããµã€ãºããã©ã³ããããã«ã¯ããã¹ãã®åœ±ã®ããã«ãªããŸãã ãããŠããããã¯äž»ã«EditTextãTextViewãªã©ã®ãã¥ãŒã«äœ¿çšãããŸãããäžè¬ã«ã䜿çšããããã¥ãŒã®ç¹å®ã®ã»ããããŸã ãããŸãã äž»ãªç¹åŸŽã¯ããããã®ã¹ã¿ã€ã«ããTextAppearanceãšãããã¬ãŒãºãååšããååã®å±æ§ã«è»¢éããå¿ èŠãããããšã§ãã èŠããããã

ããã§ã¯ããã©ãããã©ãŒã ã®AppCompatã©ã€ãã©ãªã䜿çšããŠããã®ãããªTextAppearanceãäœæããŠããŸãã ãããã䜿çšã§ããŸãã ãããã®ã¹ã¿ã€ã«ã䜿çšããŠã¢ãã¯ã¢ãããæäŸããããã«ãã¶ã€ããŒã«æ瀺ããããšãã§ããŸãã
äžè¬ã«ãAndroidã®ã¿ã€ãã°ã©ãã£ã®ãããã¯ã¯éåžžã«åºç¯å²ã§ãã è¬çŸ©å šäœããããã«è²»ããããšãã§ããŸããããããããç§ã¯ãããç¬ç«ããç 究ã®ããã«æ®ãã§ãããã äžéšã«ã¯ãAndroidã®ããã¹ãã«é¢ããããŸããŸãªè©³çŽ°ãèªãããšãã§ãããªã³ã¯ããããéçºã«çŽæ¥é¢é£ãã次ã®ãããã¯ã«é²ã¿ãŸãã
ãããŠãã¹ã¿ã€ã«ã«ã€ããŠæåŸã«èšãããã£ãã®ã¯ãã¹ã¿ã€ã«ã®æ瀺çããã³æé»çãªç¶æ¿ã§ãã èŠãŠã¿ãŸããããããã€ãã®ã¬ã€ã¢ãŠãããããŸãã ããã¯éåžžã®ãã°ã€ã³ãã©ãŒã ã§ãã ãããã£ãŠãé»åã¡ãŒã«ãšãã¹ã¯ãŒãã®å ¥åãã£ãŒã«ãããããŸãã ãããã®ãã£ãŒã«ãã¯éåžžã«äŒŒãŠããããã«èŠããŸãããããã§ããå ±éããéšåãšã¹ã¿ã€ã«ã®éããããã€ããããŸãã ãããã®ã¹ã¿ã€ã«ã®éå±€ãæ§ç¯ããŠã¿ãŸãããã

AuthFieldãšåŒã°ããã¹ã¿ã€ã«ã䜿çšããŠäžè¬çãªéšåã匷調ãããã°ã€ã³ãšãã¹ã¯ãŒãã«å¯ŸããŠåå¥ã«ã銎æã¿ã®ããæ¹æ³ã§ç¶æ¿ãããã¹ã¿ã€ã«ãäœæããŸãã ãããã¯ãç¶æ¿ããŸããã ããã¯èŠªå±æ§ã䜿çšããŠè¡ãããäžè¬ã«ããã¹ãŠãæ確ã§ã·ã³ãã«ã§ãã ãããããã以å€ã®ããšã¯ã§ããŸãã ããèŠèŠçã«ããããšãã§ããŸããããèŠèŠçãªæ¹æ³ã§ãã¹ã¿ã€ã«ã®éå±€ããã©ãããšãã§ããŸãã

ãã€ã³ããä»ããŠå ±ééšåãåçŽã«åé¢ãããã®æ¹æ³ã§å ±ééšåãã掟çããã¹ã¿ã€ã«ãèšè¿°ããããšãã§ããŸãã
ç¬èªã®éå±€ã§ã¯ããã®æ¹æ³ã¯ããèŠèŠçã§æçœã§ãããããããåãå ¥ããããããã«æãããäžè¬ã«ãã®æ¹æ³ã䜿çšããŸãã
ã¹ã¿ã€ã«ãšããŒãã«ã€ããŠãç§ã¯ç§ã欲ããã£ããã¹ãŠãèšããŸããã ïŒQïŒAã»ãã·ã§ã³ã«ã€ããŠã¯ããããªãåç §ããŠãã ããã-EdãïŒ
ããã¹ããã£ãŒã«ãã«ã€ããŠèª¬æããŠããã®ã§ãããã¹ããã£ãŒã«ããååŸããéã®äž»ãªåé¡ãææ¡ããŸãã ãã®åé¡ã¯ããŒããŒããšåŒã°ããã¬ã€ã¢ãŠãã®äžéšãšéãªãå ŽåããããŸãã
ãŸããããã¯ãŠãŒã¶ãŒã«ãšã£ãŠå¿ ãããè¯ããšã¯éããŸããããã®ããããããŒããŒããšã®å¯Ÿè©±ãã»ã¯ã·ã§ã³ã§ãããŒããŒãã«é¢é£ããäžéšã®ããŒããèŠãŠã¿ãŸãããã

ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãéçºããŠããããæç¹ã§ããŒããŒãã®ãµã€ãºã決å®ãããå Žåã¯ã99ïŒ ã®ã±ãŒã¹ã§ãããè¡ãå¿ èŠã¯ãªããåã«è¡ãå¿ èŠã¯ãããŸããã ããã¯ãããšãã°ãã£ãããéçºããŠããå Žåã«ã®ã¿åœ¹ç«ã¡ãŸãããä»ã®ãã¹ãŠã®å Žåã§ã¯å¿ èŠãããŸããã ã¬ã€ã¢ãŠãã®ãµã€ãºå€æŽãç£èŠããããã«å¿ããŠãããŒããŒãã衚瀺ãããåŸã®ãµã€ãºã«ç»é¢äžã®ãã¹ãŠã調æŽããæ¹ãã¯ããã«ç°¡åã§ãã
ããŒããŒãã¯å¥ã®ã¢ããªã±ãŒã·ã§ã³ã§ããã決ããŠèšå®ã§ããªãããšãç解ããããšãéèŠã§ããããã¯ãå®éã«ã¯ããã ãã§ãããããããŒããŒãã¯ç»é¢ã®3åã®2ãå ããããšãã§ããŸãã
ãããŠãã¬ã€ã¢ãŠãã®ããªãã®éšåãã«ããŒããå Žåãäœãããå¿ èŠããããŸããïŒ ãã®ã¬ã€ã¢ãŠããScrollViewã«é 眮ããã ãã§ãããŒããŒããç»é¢å šäœã®2/3ãã«ããŒããã¹ã¯ããŒã«ããŠã¬ã€ã¢ãŠãã®è žã®ã©ããã«å¿ èŠãªãã¿ã³ãèŠã€ãããšããŠãŒã¶ãŒã¯ãã®ãããªç»åãèŠãããšãã§ããŸãã

ã§ã¯ãã¬ã€ã¢ãŠãã®å€æŽã«ã©ã®ããã«å¯Ÿå¿ã§ããŸããïŒ ãã®éèªæãªæ¹æ³ã䜿çšããŠãOnLayoutChangeListenerã ãã¥ãŒãé 眮ãããŠããScrollViewãŸãã¯å¥ã®ã¹ã¯ããŒã«å¯èœãªã³ã³ãããŒã«ãµãã¹ã¯ã©ã€ãããå¿ èŠããããŸãããµã€ãºã®å€æŽã«å¿ããŠãå€æŽãããå Žåã¯ãå©çšå¯èœãªæ°ããé«ãã«åãããŠæŽæ°ããããšãã§ããŸãã

äœãã§ããŸããïŒ ããšãã°ãããŽãåé€ãããšããã¹ãŠã衚瀺ããããŸãŸã«ãªããŸãããŸãã¯ããã°ã€ã³ãã¿ã³ãããŒã«ããŒã«ç§»åããããšãã§ããŸããããããªãã·ã§ã³ã§ãã äžè¬ã«ãã€ã³ãã³ããåé€ã§ããå€ãã®ããšãã§ããŸãã ãã¹ãŠã¯ããªãã®æ³ååãšããªãã®ãã¶ã€ããŒã®æ³ååã«ãã£ãŠã®ã¿å¶éãããŸãã

ããŒããŒããšã®çžäºäœçšã«é¢é£ããå¥ã®ãã€ã³ãã ãŠãŒã¶ãŒãäžèŠãªã¢ã¯ã·ã§ã³ã匷å¶ããªãéãããŠãŒã¶ãŒã¯ãããæ°ã«å ¥ã£ãŠããŸãã , e-mail (@) . - , , e-mail. ããã
. e-mail, , , . , «» . user «», , , . . , -, , Sign In, , Done, layout, . .

: inputType imeOptions. inputType , - . -. inputType Text Password, , , . , .
inputType - , , textEmailAddress, «» .
. , â , , , , .
imeOptions, , , . . , «», «», «», .

, inputType. textEmailAddress, «» â , e-mail.
inputType - . , - - .
inputType=âphoneâ, . , , â , , , . .

listener - , . Done. , . â .
Actiondone, , â .
, - . , Actionnext , . , , - , .

, . - , landscape, - . layout . fullscreen-, , - . , , , - , layout . . , , : « » ( e-mail), NoExtractUi imeOptions, Pipe, imeOptions , action . , .

, . layout, . .
-, UI- , , , , ScrollView. , , inputType imeOptions, XML, . , . ( . . â . .)
, , - , view.
, , - frame layout. view frame layout, .
- linear layout. view, .
- view. ?

view, , view , - , , - , view, . , . , . - , view.
-, view, , , . .
« custom view».
, view.
, â view - , . , , view , . , view. -, view - , - view . , , button . button - . .
äžçªç®ã , view , Support Library, , - , , - .
view . - view, - : «, , - listener view, ». , , â view.

compound view. compound view? . Compound view compound components ( ). , view group .
? -, - layout, , , - -. . compound view, - linear layout, frame layout . . , performance . , - relative layout. , . , . view, view group, view .
, Android Ì view, , ConstraintLayout, CoordinatorLayout, FlexboxLayout ( , ). layout, , , - layout.

view. .
, , , Context , view .
, AttributeSet, , , view XML. LayoutInflater.
? , , , Button, , . , .
buttonStyle. ããã¯äœã§ããïŒ , , , , view , .
? Android 5, . , , , .
-, , Button .

, , view . view - , - .

, , view. . , view , - . , , .

- obtainStyledAttributes, XML, XML. attrs, defStyleAttr defStyleRes â . styleable? XML, , declare-styleable , view . , obtainStyledAttributes .
TypedArray, , , , XML, - . TypedArray Recycle, TypedArray, view.

, , . , , , , 90% , . view, , , , . obtainStyledAttributes 0.
. - view, . , - , styleable.CustomView.

, . view , . , , , , - listener view. .
, view, , , , , .
, XML, view , .
view, view, layout, , .

, , , - , , . , , . , . , â . , . ããã«å¯ŸåŠããæ¹æ³ã¯ïŒ , , Bundle OnSaveInstanceState , , , .

, , -, , , , , - . , , , Bundle.
.

, state. , activity, , , , â activity , â - , activity, activity state. , , activity OnSaveInstanceState. , , - state , , , state .
state? activity, fragment, , , . view, - . view, , state.
?

, - EditText, , , . ViewPager, , Spinner RecyclerView. view .
? , view.

, , view , . , , , â , view, , , â , . , Bundle , .
, drawable. drawable Bundle Parcelable, Parcelable, , Android 700 , . , drawable, , .
drawable Glide Picasso. , drawable .

? , view , , activity - , , , . , , . .
, , , -, .

, . view, , . . view . , . RecyclerView, ListView. , .

? , , , , . , - â , â , - , , .
, , ProgressBar.

, view , . , . , , , .

- .
, , , OnSaveInstanceState - . , , , Fragment Manager, , layout, , Back Stack, . . Activity, Fragment Manager, . , , - , , . , . , , . ããã¯ã©ãã§ããïŒ

, , onCreate, , , , activity , , , , , , - .
, ?

, , . . activity , - . , , , - . , , , .
, : Fragment Manager .
, , , , , DialogFragment. ä»ã«äœããããŸããã , , , DialogFragment â , . .

. .
-, UI , .
-, layout, , layout, , , , .
第äžã«ãè³¢æã«ã«ã¹ã¿ã ãã¥ãŒãäœæããå¿ èŠããããŸãããã®åã«ãããªãã¯èããå¿ èŠããããŸã-ç§ã¯åãèŠè§£ãæã£ãŠããŸããïŒãŸãã¯ãæ°ãããã¥ãŒã䜿çšããŠåå©çšã§ããããã«ããã®ãã¥ãŒã®XMLãä¿®æ£ã§ããŸããïŒ
ç¶æ ã«ã€ããŠã¯-ã·ã¹ãã ãã§ããããšãããå¿ èŠã¯ãããŸããããªã¹ãã®ç¶æ ã埩å ããããã«ç°ãªãæŸèæãæžãå¿ èŠã¯ãããŸãããå¿ èŠãªã®ã¯ãç¶æ ã®å埩ã«é¢é£ãããããããããŸãæçœã§ã¯ãªãã«ãŒã«ã䜿çšããããšã ãã§ãã
ããã§ãæåã®éšåãçµäºããããšæããŸãããæž èŽããããšãããããŸããã