æè¿ããµãŒããŒããååŸããJSONãªããžã§ã¯ãã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãåæç»ãããšããèå³æ·±ãã¿ã¹ã¯ããããŸããã Googleã¯ããã¹ãŠã®è²/ããŒããxmlã§èšè¿°ãããŠãããšããèããæ瀺ããŸãã ãã®ãããæéŠã軜ãåããã ãã§ã¯ãR.color.primary_buttonãéããç·ã«çœ®ãæããããã«ã©ãã§ãæ©èœããŸããã
ãªãœãŒã¹ã«é¢ããæ¯é±ã®åéºã®çãæ¹äœã«èå³ããããªããç«ãžããããã
å°ãã®èæ¯
ãã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããã€ãã®ããªãšãŒã·ã§ã³ãããããããããproductFlavorsã䜿çšããŠç»é²ãããŸãã å°ããªããšïŒããšãã°ãããã¹ãã®è²ïŒãå€æŽããã«ã¯ãéçºè ã®ä»å ¥ãå¿ èŠãªã®ã§ãã¢ããªã±ãŒã·ã§ã³ãšãã®ãªãœãŒã¹ãåé¢ããããã«å€ãã®æ段ãåãããŸããã ãã®ã¿ã¹ã¯ã®äžç°ãšããŠãé è²ã®å€æŽã«ã¯PlayMarket / AppStoreã§ã®ã¢ããªã±ãŒã·ã§ã³ã®æŽæ°ãå¿ èŠã«ãªãããšã«ãæ°ä»ããŸããã ãã®ãããéçºè ã®1人ã¯ããµãŒããŒããã«ã©ãŒã¹ããŒã ãåŒãåºããå®è¡æã«ã¢ããªã±ãŒã·ã§ã³ãåæç»ããŸãããããšããã¢ã€ãã¢ãææ¡ããŸããã
ã¢ã¯ã·ã§ã³ãã£ãŒã«ããšã¯äœã§ããïŒ
- 47çš®é¡ã®ã¹ã¯ãªãŒã³ã
- ã50ã®åœ¢ç¶ãšã»ã¬ã¯ã¿ãŒã
- ã70ã®ç°ãªãè²ïŒã°ã©ããŒã·ã§ã³ãšå¢çç·ãæã€èŠçŽ ãããã°ãç¹å®ã®ç»é¢ã«åºæã®ãã®ããããŸãïŒã
æ¢åã®çµéšã«åºã¥ããŠã次ã®ãœãªã¥ãŒã·ã§ã³ãç¹å®ãããŸããã
- åã¢ã¯ãã£ããã£ã§ãUIãåæç»ããã³ãŒããèšè¿°ããŸãïŒé¡ã®æ±ºå®ãidã¯ãã¹ãŠã®ãã¥ãŒã«å²ãåœãŠãããè²ã¯åã¢ã¯ãã£ããã£ã§ããã°ã©ã ã§èšå®ãããŸãïŒã
- 䜿çšãããŠãããã¹ãŠã®UIèŠçŽ ããã®ç¶æ¿ïŒã¢ã¯ãã£ããã£ãžã®å€æŽãé€ãæåã®ãœãªã¥ãŒã·ã§ã³ã®éçºãxmlã¯ãã®ããã«èšè¿°ãããŠããŸãïŒã
- ãªãœãŒã¹ãŸãã¯ãã¥ãŒãŸãã¯ã·ã§ã€ãã®äœæäžã«å¿ èŠãªã¿ã¹ã¯ãå®è£ ã§ããä»ã®äœãã®ã©ãããŒã
次ã«ã3çªç®ã®ãœãªã¥ãŒã·ã§ã³ã®ç 究ã«é²ã¿ãŸãã
å®éšçªå·1ã ãªãœãŒã¹ãã©ããããããšããŠããŸã
Androidã¯ãã¹ãŠã®ãªãœãŒã¹ãç¬å ããŠããŸãããããã¯ãªãœãŒã¹ã§ãã ãã¥ãŒãŸãã¯ã·ã§ã€ããäœæãããšãã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããã³ã³ããã¹ããããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãååŸãããŸãã ãããŠãã³ã³ã¹ãã©ã¯ã¿ã«å¹²æžããå¯äžã®æ¹æ³ã¯ãã³ã³ããã¹ãã眮ãæããããšã§ãã
Googleã¯ããã«å¯ŸããŠäœããããå®å šãªã©ãããŒã§ããContextWrapperãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ã³ã³ããã¹ãã®çœ®æã¯ããªãŒããŒããŒãattachBaseContextã§çºçããŸãã ããã§è€éãªããšã¯ãããŸããã
次ã«ãResourcesã¯ã©ã¹ã«ã€ããŠ
ãã®ã¯ã©ã¹ãå匷ãããšããªãŒããŒããŒããããã¡ãœããã®å€ãããããã§ããããšãããããŸããã getColorãªã©ã®ãªãŒããŒããŒããæ°ã«ãã人ã¯ããŸãããããã¥ãŒã®æ§ç¯ã«ãTypedArrayã«ã䜿çšãããŸããïŒè»¢éãããå±æ§ã»ããã«å¯Ÿå¿ãããªãœãŒã¹å€ã®ã»ãããååŸããããã«å¿ èŠã§ãïŒã ãããŠã䜿çšããããã®ã¯é ãããŠããŸãã ãããã£ãŠãæåã®åçŽãªã¢ã€ãã¢ã¯å€±æããŸããã
ããããåæã«ãTypedValueãšTypedArrayã®è±å¯ãªäœ¿çšã泚ç®ãããŸããã äžè¬ã«ããªãœãŒã¹ãšãã®äœæ¥ã¯ãããã2ã€ã®ã¯ã©ã¹ãä»ããã¢ã¯ãã£ããªäœæ¥ã«åºã¥ããŠæ§ç¯ãããŸãã
æåã®ãã®ã«ã¯åé¡ã¯ãããŸãã;ãªãœãŒã¹ã«ã¯getValueã¡ãœããããããŸãã ãã®ã¡ãœããããªãŒããŒããŒãããããšã«ãããããã«getColorïŒè²ã®å ŽåïŒããã³getDrawableïŒColoredDraawbleã®å ŽåïŒãæ£ããæ©èœããããã«ãªããŸãã
ãŸããTypedArrayã䜿çšãããšããã¹ãŠãããã«æªåããŸãã ãã®ã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒããã©ã€ããŒãã§ããããã©ããã§ããŸããã 圌ã®ãã£ãŒã«ãã¯éããããŠãããããããå€æŽããæ¹æ³ããããŸããã å å¡«ã«ä»å ¥ããããšã倱æããŸããããã¯ãæçµã¯ã©ã¹ã®AssetManagerãä»ããŠè¡ãããããã§ãã 圌ãšäžç·ã«ç§ã«èµ·ãã£ãå¯äžã®ããšã¯ãåå°ãéããŠææã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããšã§ããã
ãã®çµæããã®ã¡ãœããã¯å®è¡å¯èœã§ãã å°ãªããšãæåã®ç»é¢ã¯å®å šã«å¡ãçŽãããŸããã TypedValueãšTypedArrayã®äœæ¥ã«ä»å ¥ããããšã§ããªãœãŒã¹ã®ç¹ã§ã»ãšãã©äœã§ãå€æŽã§ããŸãã ãããããªãã¬ã¯ã·ã§ã³ã¯å±éºã§ãããšèãã極端ãªå Žåã«ã¯ããã«é Œãã®ã§ãç§ã¯æåŸãŸã§ãããçµããŸããã§ããã
ãã§ã«2åç®ã®å®éšã§ãResourcesã©ãããŒã«é¢ããå¥ã®åé¡ã«ééããŸããã android.support.v7.widget.ResourcesWrapperããã§ã«Androidã«ååšããããšãå€æããŸããã ãã®å®è£ ã¯ãäžéšã®ã³ã³ããŒãã³ãã®ã¯ã©ã¹ãã©ãããããŸã£ããç°ãªãçµæãçæã§ããŸãã ãšããã§ãResourcesWrapperã¯ãããã§ãããåãªã人éã«ã¯é ãããŠããŸãã
å®éšçªå·2
ãã¹ãŠãäžå çã«è¡ãããšãã§ããªããããã¿ã¹ã¯ã¯2ã€ã®éšåã«åããããŸããã
- Viewã®ãªãœãŒã¹ã眮ãæããŸãã
- Shape and Selectorã®ãªãœãŒã¹ã眮ãæããŸãã
Oãã¥ãŒã 眮æã¬ã€ã¢ãŠã
ããããå€ãã®äººãgithub.com/chrisjenx/Calligraphyã«ç²ŸéããŠããŸã ã 2çªç®ã®å®éšã§ã¯ããã®ã©ã€ãã©ãªã§äœ¿çšãããã¢ã€ãã¢ãã€ãŸãLayoutInflaterã®ä»£æ¿ãéžæãããŸããã LayoutInflaterã®çœ®æãContextWrapperãä»ããŠè¡ãããŸãã ãã¥ãŒãåŠçãããã¡ã¯ããªãŒã¯ãLayoutInflaterå ã§åå®çŸ©ãããŸãïŒæ®å¿µãªããããã®ãã¡ã®1ã€ã¯ãªãã¬ã¯ã·ã§ã³çµç±ã§ãïŒã ãŸãããã¡ã¯ããªãŒå ã«ã³ãŒããå®è£ ããããã¥ãŒãšå±æ§ã«å¿ããŠãå¿ èŠãªãªãœãŒã¹ã®çœ®æãè¡ãããŸãã
圢ç¶ã«ã€ããŠ
ãã£ãšè€éã§ãã ãããã®ããã®å·¥å Žã¯ãããŸããã äœæã¯ãéä¿¡ãããxmlãã¡ã€ã«ã解æããTypedArrayã䜿çšããéçcreateFromXmlã¡ãœãããä»ããŠãªãœãŒã¹å ã§è¡ãããŸãã ColorStateListã§ãåãããšãèµ·ãããŸãã
äœæäœæ¥ã®åŠšå®³ã¯æ©èœããŸããïŒæåã®å®éšã§èª¬æããæ¹æ³ãé€ãïŒã ãŸããäœæããããªããžã§ã¯ãã¯ãªãœãŒã¹ã®IDãä¿åããªããããäœæåŸã«åæç»ããããšã¯ã§ããŸããã ãããããã€ãã¹ããããšã¯ã§ããŸãã ãªãœãŒã¹ã«ã¯ãgetXmlã¡ãœããããããŸãã ä»»æã®xmlãååŸããèªåã§è§£æã§ããŸãã ãããã£ãŠãIDãšãªãœãŒã¹ããããšãDrawableãååŸããŠå¿ èŠãªå€æŽãå ããããšãã§ããŸãã
ColorStateListã¯ïŒDrawbleã®å®è£ ãšã¯ç°ãªãïŒãã®ã³ã³ãã³ãã®å€æŽãèš±å¯ããŸããã ããã§ããªãã¬ã¯ã·ã§ã³ã䜿çšããããæ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããŠããã£ãã·ã¥ãå®è£ ããŸãã
ãªãœãŒã¹ãã£ãã·ã¥ã«ã€ããŠããå°ã
æåã®åžæã¯ãç®çã®DrawableãšColorStateListãå€æŽããã ãã§ããªãœãŒã¹ãã£ãã·ã¥ã䜿çšããããšã§ããã ããããããã¯2ã€ã®çç±ã§æŸæ£ãããªããã°ãªããŸããã§ããã
1ã€ç®ã¯äžèšã§èª¬æãããŠãããColorStateListã«åœ±é¿ããŸãã ãªãã¬ã¯ã·ã§ã³ããªããã°ããã®ã€ã³ã¹ã¿ã³ã¹ã®ããããã£ã¯å€æŽã§ããŸãããã€ãŸãããªãœãŒã¹ã«ãã£ãã·ã¥ãããã€ã³ã¹ã¿ã³ã¹ã¯äœ¿çšã§ããŸããã
2çªç®ã¯ãColorDrawableãšåäžã®ColorStateListã®ãã£ãã·ã¥ã«é¢é£ããŠããŸãïŒããã¯ãColorStateListãã»ã¬ã¯ã¿ãŒã§ã¯ãªããè²ã«å¯ŸããŠèŠæ±ãããå Žåã§ãïŒã ãã£ãã·ã¥ã¯æé©åããããªãœãŒã¹IDã§ã¯ãªãããªãœãŒã¹ãåç §ããè²ã«ãã£ãŠçºçããŸãã
çµæ
ãã®çµæãã¢ããªã±ãŒã·ã§ã³ã«ã¯ä»¥äžãå«ãŸããŸãã
- ãã¥ãŒã«å€æŽãå ããç¬èªã®LayoutInflaterã
- getDrawableïŒint resIdãResources baseResourceïŒãšãã圢åŒã®äžé£ã®ã¡ãœãããåããã°ã¬ãŒãã·ã³ã°ã«ããŒã³ãã«ã©ãŒã¹ããŒã ãDrawablesãColorStateListsã®æ ŒçŽã«åŸäºããŠããŸãã
- ããŒã®ã¹ããŒã¿ã¹ãšã³ã³ããã¹ãã©ããã®åæç»ãå«ãåºæ¬ã¢ã¯ãã£ããã£ã
ãã®åé¡ã¯ãæ¢åã®ã³ãŒãããããã«å€æŽããããšã§è§£æ±ºããŸããïŒããšãã°ãèšç®ã®çµæã«å¿ããŠããã¹ãã®è²ãããã°ã©ã ã§å€æŽãããå ŽåïŒã ãããŠãããã¯ãããªãéçºã«ç¹ã«åœ±é¿ãäžããã¹ãã§ã¯ãããŸããã
ããã«å¯ŸããæéïŒã·ã§ã€ããšã»ã¬ã¯ã¿ãŒã®å Žåãå°ãªããšããã¥ãŒã®äœææã®è² è·ã®å¢å -ããã«ã APIã®æ¬¡ã®ããŒãžã§ã³ïŒçŸåš24ã䜿çšããŠããŸãïŒã«åãæ¿ããéã«èµ·ããããåé¡ãããã³ããã€ã¹åºæã®ãã°ã
ããªãã®äžã«ã¯ãåæ§ã®åé¡ã«çŽé¢ããŠãã人ããããšæããŸãã ãããŠãã³ã¡ã³ãã§ã©ã³ã¿ã€ã ã®åæç»ã®ãããã¯ã«é¢ããããªãã®èããèŠãã®ã¯é¢çœãã§ãããã
ãæž èŽããããšãããããŸããïŒ