From 1293b6b299b2e09465f623df613c72d7dd8ad41c Mon Sep 17 00:00:00 2001 From: Katarina Stenstedt Date: Wed, 17 Jun 2009 17:56:18 -0700 Subject: [PATCH] Added info about mcc and mnc, plus other changes per http://b/1918247; rewrote "How Android find best match" section per rgreenwalt's comments and added flowchart. --- .../resources/res-selection-flowchart.png | Bin 0 -> 23228 bytes .../resources/res-selection-flowchart.vsd | Bin 0 -> 56320 bytes .../guide/topics/resources/resources-i18n.jd | 1429 +++++++++-------- 3 files changed, 716 insertions(+), 713 deletions(-) create mode 100755 docs/html/guide/topics/resources/res-selection-flowchart.png create mode 100755 docs/html/guide/topics/resources/res-selection-flowchart.vsd mode change 100644 => 100755 docs/html/guide/topics/resources/resources-i18n.jd diff --git a/docs/html/guide/topics/resources/res-selection-flowchart.png b/docs/html/guide/topics/resources/res-selection-flowchart.png new file mode 100755 index 0000000000000000000000000000000000000000..d738b3f0c866ef39f9b756dc08dd615798ec5400 GIT binary patch literal 23228 zcmbTeby!qi^fyWl9U>thr6M3HIdln<0@5KV3^Bxjbc2ADARR+UBPk;#-BLqH4c#aV zQUW4%59;@K?|q;5KKHrz4<9^-eb!!k@3r?@`?J=ENX=(YNeJl(F)%Pll$D-5$H2fG z2L4UsV*zip>{IH2ADC{>pUPoWBJX|&9&jMC>arLZALEEFEO3EmW-F!V>KGV44>2%; zUSnYV23`ey!@zLo!@$@!$G{Lv!@!_%fq&MLz`!sPQ+^_=<7K*={59kE|KZq2yFn$sUcJgA`{gk?sQ#2uGWO6CrUqPZ?zyBuRVWAH0HQX z59;dcULxHqKYacXcsN-Va6J06iZ}3VuV2$l9qoi=xz8=-Mj45`+rWQHa_g7)P--_z= zaSF)hYx_C!q6REJf}_v9TE5(xPe%?3Yf}+q_Vsv5E10R(Xs)mdWlef_XSE#MWJvM` zfn~x9G!aov$0g}k`9KZfd>_+I4(UM++snYImLH7;0nG+I6nJ9_{sV7Gp$%2eR zWKITwIooyfFky9B{L;rKo_;@$%uGgk%Bt zB+L=AYm1~`^n$CT;nn_~&bofovUl4{y+l%P-zmhMNCHyk@SJ`ItR79v8HN7ps$fP{ zDW0YgDNS{5?< z*XF(cCQk^+DYoV4Zg%o*~=jTJCGfJ%8FH4EI5WA+u4?YL@;s( zZu9ZQVk16I8jU1@PSW{amWbr#*B3S~F+U=m^;5i86XzzT8Eub8-@F}{ex$Z+bD;Y6B5M4%wG2!T zWA?@diQH0(3eQBe+40aS;K@?KHLiv7>cEyB27|Z2M1WPVgGBwTM}BY_PPkMBFRXHH z2HNAv^^46=omx6z{T93J}3EBR(lCD!Lw2^u66M7(k>Kg zA(!I)<>a8Jb&1niZ~>xBI4Arz&xd?oIP0w0Ka_gM&E9+v&KkEbj9e`hwx+NY{W5+O zx?5C35#s-%t~AKEj##5EHF^gfV3umuQID>!`R>|t)wG{!^D}hIJo;)Nz#`GTd90`XDha0svh^f#d*H^H8LU%&=&&$b z5zg;ShJray{_G~n)(#(8ZFbSqUFwIXTKup&iUB2Jm>ztg9Mo-ySxEs*a%SOB6!A#p z6RQ8s78mEXE{gt2hi1BCNdY=%4X4!AHT@?;xF4m}+4lSLdBuvu(JiA;=g`Y)c?=r3 z(>EO*hkUVQVJAzNUQpQ+>{Vz2B0p%ztxm|#@v2*Af0upror64hZngwAhAI{OBQD0# zbxKYbb|lTlb~=LRr4knAsEAd77sQ6^ zv@O1`Zzz_7jGxfbOd@!xsDyZg+{2z#ydQG(to^pF#GWdPHmX!IC%oskBChq}7h2;e(DOpKJUw{DYkmr= zP&f&e{%w*D;(Eyb@;ekBh?r|>s9%T4R%qsE&keOT(HOKCfX$>qJ-p=@?`~2A&%}h#qJp$PCnMG$ z#+neNQ7nT8P?R;kZYd%Zx9M}Z)f{!`Wy>zxpsE5*eI<}jwXECgJ@vA7pl^)x=nREF zYRbd?XEj)o+=QuYYe7h1l9?b)Z)8yo_Pgq&%ROGNHrXh|V)icKK=AjTKjs3BM|d4N z(y2>5Bg}?ayoAvf*GtmxPYm_8vn{Xng91V~_mC{|?(g8=AXd>fLd<_0k_{oi@c!aBP zK4|#YapoFV_NliMVNpqz*_+;v8y@~duipr+zm0?7e*yK~iyuN-cT8-gPi(?KWf_p$ zLqx$pC59CUcJVQ|Z5cZ((@!vS>~=wh&tYDi1&~Ii|N46X*)8FTk&TbmSSh zx9(hcDY$t&czB7o$PcONiX0&6n z3Y?T*N6EV9vyLuwRAIFREAS4^Adb-Q(mL<{7aO_ln0rxdIS&{uPw3p8V}x64&2zWo z^5l*7jf6E4(hlj9OB|mc^X!RKo8^6S1j(*kyi;j=m9oN>`fI8|K<(c+=4z^<>5KiA zCv5M|ZQ5}8!cToa0B!^0-YNa)`lndKd5zv2&Qq98Xd0qUG+26dmoqQEVR3%C2V7_J zT!2LY=G7PrMJ~zS8La#7L}!yOj(;B>JQ;B9$JJeO_Y9&??*sUGo?b(#4|7hzLQ-k^ z&)iUm;~<+p)>{yoH7*w1=0h5mW5yTQtLV31E3!AE5m@s#W;%tP!I1g{zQARzC_<*M zp9^kUdsS9^_Fv5SPXZ7$PNwJN6LBGbfETvyTK`3cP{~{rO!-e}`0B{T9XARg{;b|7 zgZE$jXG~`6VL}1KiAjc8XQH3m|EKG}JLLaY*H?aU|4o4$cOVe{wxEl>^n1bi>O^FI zS}1i~9$Q3e@9b$DV;Q7IIU#GZT@4-%S6AjD3B;kXL+c+hkZ*!bLw9OAIY($7Zn$xa6D_;qxADH@@A8nm4X z3I~E^h7TR3N6`pv2ZIe&Y;6Z%mm77-57Iy)>^08{gA0LK<(v6>v%j^PS zG9V3Bcfy$9H!hP2#8AQ{+?OrjrdMPo0e0pkz>D{EaIrS9cx||Ds~}%3@S;>m;*%fD zqXd*}MrU9ItlGHbs9qa*u875-mt>+62&+Fce!f1Hjti|zKXq6cc=0G@-DIjuYjFWEm90?)^9gWC&| z9~(RCEA!jQoS=RBg3aQ~0CCXC%LgkrpO-OWGndDpbWd|%r-E#1 zAXP7#PPX;iey2EJ>a~bFEYF#qI9~r=@BsmR9YJlZYN;X-mVYipe=k5c9zI_TDfKITM9R;_n(H=!Do^pEn@{<;pC~y6 zD;dW{@#59n5&x@b?Js(e^wJa3>6af`{+=(7R?$Fof3efH(&*RrYctjFA~DBl19#kj zT5Zk7$K;7t#m1A{LGPDNvHQ@RlwqHL@s0+KRC#Tb#bbzsCmg;b{_d}mq&eQ3&>2xc zkRe)7;%DmMteB{Dd$%v(`Cpf$(`~56XGQ%>7uiQ#9quChg=p?;^-R9OBE_S1Xk6XT z{A_n^#l+F^H^RW)1g>4dQQ#ejbD~Oml{=e>b zlhni?r|teyJBo^g^+?U=f0=uw{)8#st^y&LhjX20s`8Bl;uprRga~_!JH0b=KifU*$9-r9)1gxu($sw(uR&>&V@X zd^avr2;Y7A5*N;z&DRzC0Uq(1w@7U9318LPJ(c!)#TIr5$z`^B+U`%5J0ym7Zkta< zRlOcZ_hUbPV?Lpjo`3hfXQ706&Qzq=M9;R7s4Avc4Tj;+12VBMOP}M3xkL7q+`f&n zgf_Wrt0ba{^58}aJMni4)58yV2MRuiWNK@x) z*2l+yLZ0FXGY$Nl&V&oCO;1>VXDKdC5&@muvS$Cu{pL>yq0?um_I}gt6=Op-7*hys zHYIA(@&q!JShTrb66vP*Le%6PMERdG0ooEv1M@Bg76LU6@URo8a z^9U%H3l$N+0(~U@!{STWd8}uq4I0G=53}ACU7X8~rTbztk`hB$aO=%zk9m8#&*fPRI0V^{PqUVhv_fA*M_{VZQNp-)@+zH7J|qi(K{bpa|xXPX4j zD~=Ay1ZMa5Y#cPm>D%Nt_JYl;?^$1XPqIgUr_qlCA^`G8q}jpMYCXtI<)sd zoOEiEY_SNUyS1>}96WfN4R=o7EN7y0_{sP+RTob?havN?Hr(+i#=96z>Q8J0X@BBg zZOmqI6r_anaf>3U+s!ddklY55Sxbcbm!?9QeW~1feBwkEphMsUTit!A9g~ z`#ArB_Uv0DJ~1D@2bwhFG~uGfHsKCU)v4(~H1z$^So^l9Lmy!S=b|NxVwb;A7l!Mm zakGA)66S3ox~eG+_iT%e1Gd?OPls=~1G|HSnK|NcKutmC6+%TaU5C5NRXqdzCc+vu zdFmlrlqOp1!kd~rMa&o(U2M9AWBz^`!BWeha# zN{i;ht?%+yhmQ(^i&iH$MF;Wh@fE$&_mWR+$Tz4JypbsrX)9b&as+~QwAZ6FKf(wI zIRY=pz&nEw>|J8|HY|_#gp20ghATD@p=u7~@23kBYkrH)=EYEf1AA+DF0J-8#*)5)kjtIVlX+ilPp-0^ZMs64d=N#V0Fg_;aaj-(*YhJlGhvb#!&WstDb^i4d>A@XOfC zHmUQuz_Y@(bCnMkfcuUx^HJUD{+7XPfOm9-N?KyRt(!7cXqZ*%RT~^%^2WlTgNrFy z=uN<2vS-Q&7Z;lW9%6w=O3o?L$Vhas=P_r_amM`+`;WQx^EPvn()4%GCecS_(SVg+ z)D;9vj(>7J>5#r$jceHxI37||uF)ll=|Y)Zws6)jwpU>{0A=HZf@L)%D|Lw_g4QRBjb{^(9MJORIv^-W~9h(m9GEw#}7IipeI zUf)>8Q^L0+LZ|NOC8MDWS{IB>%=o-rgDHa5Pcw)i$_B(n&GlmSla)Yp`4A#%pZ_WA z4MK7=yGExF^9~~Gnb<1|sR2U`16Um+g`;u8fhc`p1$d5tTs$Goc&W$%+Kzf?(SvdX z0`w{M9#jyp;a>@A^>dKifoQ*`g6y!2)v?;GpdnYQ&MSD!F6c`|0%!52z+Yb~?u7{Q z6@%JQ(-+?~GMVa5F%)}q&L*W%!uS)Pm4!w-4S8Hz&S>6-wRE0|w+bywNn*|qE(JThwqB3~ z?*yvT9SMMW#aClCX!XpPw>zokNCt)r0^CZ%WUE^YC9EBatyJIA;{-blh7!NBKOcHp zE!HpWzG}|Er7))_101W5o`*Dpdbgl5GmCJN1_2?+r5*d~c>BP8P?8fc^kjh}=lyP!9u-H2A3T<#jtR00WE;4c@R;dLr|wyG$O+0P zh;M5LTVE!D_B6w?Sl8b9X-Ec~2t$wNf^JoOG|3EhpdIRYYj^gdP@XQW2BHmfg)w-( zExAJ;nX!@&(#;ZWY`;(7L5?iL*X2{;-BT{Av{m&z5^;Oh@wG1b7BCS}N#>-;AJvLA9w<-UHX%s~-pzJw(i|Do^M zIXlFgotpSwHv3jPs0chK^o*wmm;b zc}y>An|_Ez`CeRI^$^kg=#wmU;rpptr-!tx9LLYwN@Br9YYEyz3jK99J!qjBy*b5E^9YL(gbkz5VCp$>MjM%!iG+*^~T6MfHx947x9Z{%*z|WcpcZfwsfo<<&g<6=(`1ep zMZSF^@lu9I^mjB$HKZ~MjH0T1E~+29I;J6}tIXQI7tt*E9f?Gy1m$kHrEP2cg zR=zklZm=YD?scez3`25Nur(H|H+v+wWwp&_(cm(o zek&Mv7xO8_u@mz&_Srg8ynf^h4n& zNK$Sig-hEh0b$VJczL4#qV*zDH8sHDRdIg<=YU5_iqL|inv{~ zb9`;z_T(w%|LsV|8fKiq4Ws_iNz=US?UkJs!TX`d0V7lJ?OktzdHfbFPNdXTkmwlw z$RI183)=_(pO)X#Hk%^c?G8r^yXq?-HU%4vk&MGAV#vpsm>ycF62%quM0=x~bl{vL z@7~r&DoAk%l#FL02lvh09ms91XK_aiSvsFckd~fo&94u8d6W$FNX&*`c=}5}^ESU# zQ)a>W2a{=^6^%ag`!Qc-(&9tgM@U^9gOdxYG&y4$2{@7Nxvj`H0c7q9)!4o|Cq_;q zQB6O7kKKRj)Z1(DxbhK+1S}8j1oL3{Ht+Xjp$FAsk2L-KbGf6V^@K`C!QeLN()DQg znu6_s&<=>iAF~(BVRF4K9>%XWMc$k0ClT?h;6jP9sFotLFB<{D7BG*;LDa4)aBdx) zy_Y*1TzT!xtIESk@1UdYwGL!C5@(65CCQR=Ons%lKD@$zBENw}D{;3+o2pdc8Fe<5 z-9AdDi%V+ADN$A;$b73cEmwlh*||hF4HgUEkTS##F(m4XyL*p{uFYvoI%TJ56{9SCWf?u=jiurEWT zj+?QHB?K2B_MEXs{u5~1Xr*L{NMH&TjJkO9Ba?QM^>j3PtuOG~dVeBEs2+TG#E|Dw zWUZ_SOf=dqWj%yq)+vLKw^|D-UA4+rlZNZ^^SCJ7pWu7ViBDQxLzn_z;nLsjjWXhs zRud4ad;`p*bS&a%r!eM0AN9Mz)D`2nwrKeM=<(e$gT3)uWvExu01=8fk@onE~NUC zGB@Xj_hh4PSq+BVI$bzD3c_8&P$A$aWxAsAGPZnD*W1QQn`wukmqWA3a;7`kM4)}U zMg)>$yPQ9UQ47GI9EdjrhPs7i%UnY_s;O5yZ;1Ju%A3_(Xd5xQb*N{GW!Q*i_NVDT z$WXNLV^fDQ)2d)Qp8ecq>Uzg8#q;6*6qDC-C>OVv4urq#%Xl&4mHrqb%F2CG1cLx?#{RF)7rmxBxPxN+NpCZehi{9IkS#-X~SHXEigyZ z--3t?CVe38S9xtn014c^I6JK!M@V3*D>Q$Hav#t$!v=I77`Ko(NMSmIL+d;w_vvxq z$2?(_v*kFNGxW0;^`%h~5LNpp>G>|y8zwEk+0>_l(T49l5p*Rv2p2lQ*Ai_I?`H5j zml)YGYuQh7VyllB##iD&>`H9VhJHlnsTIq<%n)s%w_i|+Y=KZ`XI?(Q-iMzTQRKVI zKHlEq3b;$CRalAwDj+l_aH`}f)^pb=#}gr%@_ib!12@XrQgpDS zlTgAkSIRj_@8L*Z2}JtbAw(%s;EW_Z?l_AZGx08b0kt_jy8j*QJLh=4z1ripabl;e z!lfLX@TxH*?APme$6$7W%=-8=9jxz~Z$<{Kc}z~r>{|sX>CxRG#HIc(rU+j?_SR&m ze}nn8qm}1Ebp%AHhN>$?%WAbM`i0SHxmH(|oqF>*OdqUChp8rf_WS; zX1qlJagK4HqpB0*jtX$JhIVKOMj@g{R;e+&Q9Zu4V#pu6ES=gf@CqM{xR9WCTSRAE z0cc$+x(7w|s^iIyxl0;p&Ln`4k-)`Iv)#6qNqx3ik(K5NgVIeN){r^A$2JiG0=CFzioyvxMR=#|)%C^d- zmQC;UYjy?k*@3{ojTiN9wst1?`%cmav;1`t+Z>(RLUIVr-n&R}Q<7w6q|GQ9XZ|{W zsUQ1HFsobWY`dJ#%hVnWH(t{@$zT zpJGl+hmU&#LO))BF6=O}@9#$tRhPBVGEtlJ|K{_{dr!DgkmtdY&d^ZvbAE)32FHQy zunrWfAX+lkIsKagje}FR%!1FkWKTT1Q?(|r2wv@3qp+E@p|h+N9N}R0Rh|*}8gl`P z9zh|o-XOAcg+0PEb`6ID8C`Lod-F_b(#Mj~yG$`z;nwAiz3_gU(l#c;MZr$3Mr0QJ zL`qIhdDKAsEXp-)L1{a#-ExQCnI(xNx4S;3a;Ix)Uuu-94 zvQnP5ju~y2--q3(@9xbplHyT;!a@029=Jq)7nn>;Q^s#)n?u;uL&yb6!5Dh(7NZ7C zYrS8WRG*nuNOKaew2(M;?zdOg*M{;NmTTM=?4DlDzZWz+Hm4C@cSz4A1raA=MtbO> zW@sPQK%O4ZX)%r8S5ai_zAjr|JEhwW8Qfm>V zf5A$hh49nNO>HEvN>K|4?b(7hVVquHZNV_Ojsk|onJxyFuH}7YRURjR0F{dO=`jfF zHnlBBut+|U2nZg;t$Q^H%kx@~P=jJgBpAa^p!P(vE?Lil9u5pU$J^n;c$q8QothdPC%pSnLK4189L-)`wR!4UII< z;b9o8vQ~z?_uFSR)@KEL2b^UrxSsK>Td0`Sj}ILU>Wa@fYtE2sGavf+Q_JZEgiew_ zxXA!zwb8Hvl25p7gfs!Xg{V;FUcqV?h^?x@iiPY}xczZ2|F}rt@Enr>Cjs4Hmccyz zav|Y~J8q33+~m`AmBSgGqio!m*DlZVaq==!T5ajf6#di-(2>Ttl#q>@5iP=>QjBZl z2|P^G*Vi-ESowCLn&VbR$>&x%#(r{diZa3BMgLodbH<)CQ~NrPN)bLg>miS+WhL4o1jM;% zcWNv!0`>xcjX$wzT>UCk)i`JIK_TuB_t-@}zL6wI$n(fu3~Acna^29zX-ZHRVwSG1 z-19{!U_^%Xkc`qQkjZ#B`-B1#Z8Q5katKI;HR;ggE`A3`o8Z3_Y z)aGRQG}E=ZvbDIyNB=06zK6+yb)73NeTM)Ly!?7sTL_=isxEG|cTj)>;@os#?!w-Qo>AdaK3fm@JMd&`Jau0Mr69UCj$+9o}_DdhmRAzBEBo|fYw2KN>HILYtr_L*ucDLvgDx%U#yd@& z9qpCH(*!Ho1W>#qeoFL9(Fz2D;d+ZvJCCM+7a20V*fid^s@HHm`Pj$Uw3Y3Pgo|3; zkJrBl^7}dV6t=Oy(#7@+KC`s6C#9F1p9zxDtv+4~xZYuGJj9jIz4-l<5yK^T!Ksk_ z_|Bgmc}*o;*NyeMQ4~2rh5g-m3k6HdzmKJ*0Wc#o^asrM#^5>ML79!HetE#H>5zU_(Z+v0x?~?4OuHjG zIKmIz+WW068odelCwS_)wv;%cG1vZKBo)0!ZVb{vO)bp>aFap!R zxKUq(H8J0rAB#TH2#TG&BV?6Xl58RF)}}FR2xsuwbug=?M*e<*SL%-yywu)zP-8>7 z&Na0CF@W0h$#9Oir?40}XO*k92oFef_}9qVEYFBj+c2Kal~qp0BwI9@7Xxx|l$w2x z-wj|h+@YrBq2@H_vvYjG3CuDnC@}?QV}~X1ajRTmY$E`BHS^A~bjjNN?GsW`@q4iI5-%OUySkaE!T<&!ac;bvyz2pLXUOeVyA{wqt+SRYkY8 z4L5u&{kGiUU2V%X%S_C3zl;BM@ZkHXq3K~qM_iO(seMIdZR)n;!%D9j&dqubAN zuF?^ZHBR%pg}0F71tjxW%UmnbGz>(D*uz*|!8}^dE|2VwkLe+|)b_>;mrz1V6)i3M z%z!O%NmDjuHQ}0C_nu_W-A@0=5A{7&vgk#DiM)|n=gGjO%69h~is9@aF&emcPcLgO zrNO!Hrm9R$v=`Wv6VE9}%){XuAu}Bvd%L6`rskf*Yk)1kk^sh8K%K0gvD3P8!!Kv#^)>wV4^yvxaI#u+#7?(|+-L%eSOq@2_*ELl zseh#;Zol)Ie^m>B>pmY^6fIS7OzTD@Mc;HF{!`C*Tmekycp80AZ;>V2!Z!=Wf&@V(%cPOaM^$o2Jc8_?FhXlkZFK8McF0;lv*Pjp*kC^0xr zkWgJmNgLb1*ALj;{>R(NQ-BxmQigMnJx{a2zES@0ZB-P4lD-c3{W%@nx*cS^`;p;P z3bT{(uHRv0(+>&%->+64zn=Q|09p5eU9Fl{Krh_UVoCptp-RBU!L*sw8tq8X2JW1m zxMKtc%`FaI(~Hr?MPuiNl^tY`v>8~KFfkGl7B%}uq^@6&wyxrSt`Rb0eMTVg`*^6x z{5~9jSbbdf2^uJ0uBY(P7lnvz|G?r{0?cko_xe&3S3KKo_3 zN1;<88GBjaR4mV1_`$^Z^KVfHx}K?Lzi!{a%j^C1a4G+hclUWa=%;u{*Y2#OUf zj((u=G>?BBFog>P$Wso`ajnS0&(6@$L6sb$Pz-8Pe_#46_$RmMC zB$=l58~xI8rKh{*6m=qiCzxJppfws^#|!=C%U@Tav4!g zpgQL(CA&b~Qc4u`vbT<6ifx9YOAk)Pjt3MD`I`juTZzl2M0)lC z;_;pjQ3$LJ z84~n8h;{EUbkWD9Vt>1e3m~R7I~dSUhNO#agyx(<%Oo1|WzZZCP&0ZsFb`(y zB!4!rv1M=eS$m5N_j`FKEZs2T->pnwP>FhXxg2fCOIBiT<*!v9o3k+hz(|;cEmZA~ zJUQyc%Ge;qdDy$8y(j8uzN#%6Pl9t(7c+DFGoBbl=;m0&DYN(ET`PC(Y z$Y?rLq8wR8L{-V}v*O5j6lf?bsoj_S%KTAT$z$yv5r@v$EXlv+7=j}_IJHHS8sm-k77v_>nxBN|uX&DO$mXT4sz18 zp2yboL1t`ZK86#Cs*+~Jrq@84T!j%u5p!g!JM};675_6SQV3qg$BwmXvxyKg!PN>4zCKvbt@Z133zvMO)c+Rx7LruN zia^RJ>ysJ@3CA4Ch2!k2I{Tz8F7|N9#n4yJ_mVr)P0dR|<=yplOYOpB)xob`d7WX8 zgj++XevVM=>?gWR%d*ip#(OFJ+cT{`NK!#7$3twjjykq;LctiP7A(%p+;uCVLr`&r z%YyM6Ek$1nT$I*3YqHk7nOv4kb4AYa(C`K)eNB94>`xs>6!*kE8C*Q+tmPFcrt}40 z*Ol=>dklkJb3s$Xs1+MDxgv3Y<}6aEU?_RBV(H%&oE|`Z9GX#>>5lk)cw`feFX~n( z1njLp8@p^B?K3=+zEWGc{XyvO_CL9YT=Y2&klb@_IvUDcJk%TNcb9!KPHi6)zT0xT zXgsn`3EBA`ovbq6iE2A*yWRs*t|lYrY{;tv24}zP!Pd*Ek*gjvDx@*1aVlu>G`j7g zc}qGlFt9C~mK8bmm4-99APnJN2f#7WX;EqMT?C!Gm=(SXgPc)La_l2g3Ih|17~$0f zC)XZS=1+J9eq=R-UM-JVO;^4svtN!x=(_jOg&DF!-rK4vsC@|z=k^R=brwueWr2mr zmy9Lq&-;nJv3Ne2S~jcjvWfS z3V2}(9$j625HI+B<|>z#I8JKIk&ysxY|I9Z*DVgopRHDt(B3En6_!Kcy^3r^3&~s% zLLwJ;zP)DcNJwjNS@*T`*B0^(uJQY<_^NHMS?0{UpVsBoJ&+yJekoNAHIMLV zKggxoh#=k+bp%P;x=xL|IP)fjy53R$s7v-r)lBBvk@^fohI4VztobR4!7q%zjh8s{G`u) zc_pMT&xYi$Qpm2|&huIBd6t5X8v0L}3RqpDMH3~Y!{kS)CI0SaWep>|kiOdww`CU< zwB})^46D1CcF>&o417^1XI`OG030~;)x*C?g6OZU!f11>$b6?#sW*(sF;hr2jqe^^ zkvPazkGvOwWVXdB<|voF$nhMk9E+iX=o8iw_AGKiREdp842fn4bAP!P>$MudW!je7 zb8jEh=bB#SSypRqYAMjlXq+3;1w@+|tgQ+YP&!HL$WtGQ4X+0TU~hNG9e@J1F^Y&k z&3xXkeJ%iSD98;ssq6;fjzZAT(C0G5`e*(_Q_M;ZNgUlIqV#aQE`@8v;sx~m3oWfp z397?Ga-4cRgUNZp-eE{9fed$*HpuO%0o_u{&=sG~%XjwN?M^ym)KHPIS>4Q!t7w(? zdhciEwxE#~bN27JGjk`4O!b;|b{#~ldQgPHwa?#qgdi%y9kbvARkD*@N5cOzu?(wd z5b<0F%D%?27Z^P!&XkJ6EH|=pp}GQ&pceo>PnN5Y`{?-&!4EB7K0f)M`DNGuLbh94 zO}fC?UT{o2qVz2m1+D~ON0I-r(_JwL5I8FCZvJOeP}oWTGujP2Iv)WCcUsSm|2m|A zgC8oezrgX|1S-R0J>kT2L3QG`z;56SGYYeeM)W^> zXVJ8B-!!WzFCgM$;^(A>QlLQCS_j==(KKjNjyAmI#syTq?qqDP@vZYu zU{?UxebDb1C?G ziG2%#)g3+13NHpKpLYfB3EKfL)k$z+bt4b77>j|9uU%$xu=t# zD+1-zZ$O57yqx0b_ygWm7|Z z%bw8!)8O&pon|u7&O=Eg8X^CwxOo-5Ze*D$y+nWcxCm1ek>TCuLyqJbq6EJItdsAZPfdnNx8TVr|&H*!n`YXt zioxPxdY&KDU>?CgvcKFk(=v-f+~)A`jG}_j?CjjSX_k1B2No~&@qF(B^XNBa?73;? zP7?)GlY1R)L?Z@0Va_+YNo27hk@;IB)Ax{iV~vtGi-9aL=nXDq3;tU?Q4(B1() zq(QU6JY+YV^X*}E+X1gFe80Y%Zbl^xcHqz{I9H2I5b4|b!{DHobDJTGUv zfI6xr@g{y!phRBWBtqOY1gMn9Xn#NhN!@(_^Dw-0&h-F_+@Dbbz&Hzl@befnVXQ)T zCE1ZYi}I`J)fd$s0I)yns|kP6904HwP3F4*9$kA1a1Ol4A`#J^9kaMMmGZJT*#Qbb zNJuS!^iC~?0^dqL0EFN=(8$0mTJU;+?0^y=glLKfC}8&`1Cj=(@qiGT@)rQwe!}?w zRe|N=YjpJKzo z0EE$N8PlW#&u_;JC~s4XnA~f)~f`863P)CGm4qUbW5wZ<`w8nVVSb2$)kvfU#;svPvi=Q@f_>UV7#h)PYKc z@8(`2gZron+;nj#Xa|FLbV{NcDAkEsl8+!|k>oNntT}p>4Hl2f7BPtiH~DQz9e%n0 zsuASDX<^Ts&nLzFSQ6od>-2hK4k1baa6H_<&y!FO%o1hZ{#IXm zN$@Lm&~{c%+>SR2k@&%rhL8qQ_HCm`axnSvb)FSwwqf9{ndGnL+dPzz;;H>jfL<{@ z+tXe)G~+D>K=n^Y=qnZA3oct9?AC7TXP?H2n?!+|y0WT@Qh~FI`)lHJR^Z^UcTvLT z2JUb|Pe3=kjgt0$1m_ic{gG4I4Xq=-)fpf?8=sSp?QwAZUrcn{XCLi+y;0%02U)E0 z-U>B4I}a>*_G6du0n(}78DgIf7EjC@EIS)t^4~~yKGz9H+++g=Rka6JfWH2mD1aT` z#h|?bkS`b>B9T=`v6Jk`shRix>npw4_kSSpdo8R;p1c!o-A72h+06g-)zn<(AJRo> zB?TmP{K94%s0G{|xZzzi>F7ryRP6!;j-wE|o`pBmi~sx97QE3R)Sd0jg-QJSJOif3^83O^fYYpj)U)~Z+5e8C-n14}Rse8{ zM%!*Uz&8}ZKP1(EG>pHz^#7BFA%DY0`XD3#x&0r5>MsxdFPR<4oeN~53>+2yal8KU z(EpOz0iKfm@DK{;_CH?wUmp5jGCM$SAF>hFGk*7vm;SH7`VX1?CS`0S;3nMhABFZW zL+LM>9U!+O(qkv}9{l6U{s0vHz&{|8GOIT7zGf*0-$z zmvzfpkiH_{8#WN71cZL4M$gX%hB=2lwkv%|!Xd(MUW_ zv5g*)wgTfXh-(PV(k*>D1w4LN1{_^rErApGcvH^*(81H zi&~lrhK2RLEXhw3$^m~zD&$IyxTUAT$0nesVe{DsIZOO>h3WVH)3j(kHb!#`c3h!* zw3P_c2O!({nVNkuiv7G1BC&kIMYi(s2(n5(*47%!{BS;1UjT~8l-$Xw;-Fe&M@9FU z02KQw-bBX&DHubb)nodRljB@GluLiwpz1^D-q{lO>&{UcryZ9hYz8s7z z){uA6#HX zy&YsK+me5WfC_T~EQP#Y zL1{z}xK;sl!H=A)(Dtw9&n!uci%vsM%5zR$nG{`sI!N*x6Ir~XG?J-H!mcpQ=%hue zw5wy5+NWn;%>u0DuixM8iJt>yj#9K4_W>4Sf$-?Xq|20aG9H5N>tgo29nqXvvievg z+E7YX9-|VU77{5s=PVP>&&u7({$Z$)Jc;@jB(xdIud3M95;|9zS*o-#6M(IUW2bI@ zGy*8l{g~*zdGqzyCo;WHA=#@n^sZ-@pzKbrCC?%!>t_mPfO<5uV)o+Z*P<@ z>4klN9jI+XDI$7S?-<^vFzb2cmCP#&_Sk3x@}%j*Z^!}=lBi%#Kl{4$5#4}5T)PJL z98nwv*Oe;XipDC=WuonS7T8NAleU@UGJcvd=i~N$xV7@gOvcgwK{HgBeLG zru1lhvK*k>H3e1ce$s;fJ+VBfh-YzG{*=eqsJbztegur1?fDFz)d%b!w*TP}?kxJ- z(YWLaKP&jhKj~fN;=AOekro*v*7?|!`+wAO<^NE2|2rn5Fm|$U*>{FvrmSVjmNmPq zGuCV&OEM`WYsNZ5vhPbsin5K}*q0#@28GBLsi)7ar|0$k3%)x_xqgtT<4tY zx&UR*+b?mIk%q0^R-8OxO)WzCMIS$pyS|Z$3xmef2o<_XzVDEZQuo1`gIN4uh0@%` zTx4f{XsA_guhU`j!>B0)QQGZeIu>Y`tq1DI>RimqeEa0eMKwL=#rq#bdz@R?GqCmA zsgQ+U(M)e7k`7pC#jcp&129QaLnvRyBeOVD4=@32QKUS7dHm}J?vO07ZMLwlXOuF= zH-ff6!zQqs7(g#dD&nxpYoK|6|F!**-et6t*-$z2_+Wv?Q4bp1TZy2MZR-7P(2q>q zyGJf0mvcUOAFYPIauR9-=q08fOR2aa!_XpaA*-FeZP+du#?O>68ve`Z1v!9;A`?YrMNED3uS}VP1AKfIccg7@oc~ zl3vnU2_VC3dW=dv@{xVN4~+E0AFN+c-h8p9GFR^B=CH*#@JQ{mSHJFTf<%|m#mm%P zX{8210O$)Y+YNw7_7e>R+cj^ywp-ggR)Due=VO~5qc6-2@qk35RRp`xBj}q4@bDR_<+SI6m4A8Q? z)iJZeVH(8hz>UL;;W-% zzmwkbu~>{#0?81WZ(?VlFJku_Sx|!-`It0MpjqcVaiC`=pG8N+q0t0g`Z`2l`qxV!?E!$^Q+ziY`%&Bi|q#SMdzSmoh(YuLRaD^ zWVtzjQWKdD3Wbsxu)C)}6_1oEV~?7;X&Kkio&D^a545Jzt-IOo^?IcIgM~;N+y@-eL0T)b zu#uKe@gbqj%TtVT4J1C}fg6f-S5bqdiKa%?=%@xWOQoQb<*lME<4>eBRT`&OF(rOO zWh1qoAi3-fzkmra1rXl9=*eh+mc;>3DxYDbi5{Gpxc@7z^Lp@d@PFPxB5tu%GQei? z44HYrr>y~Zg@1?cf9mspOR9c`2fsARtz!VP@ZWLq7rg!Zj{f)$1==J9O$!k+qSeJj z&b){ISQq_YqWakgpCNcLYsOx2|I|e1FI8PV?7T? z0mxAI8JFQXBFOWmjEAEG#O_^0XhC+Nb1^#L?6&|k#*`xkT!cP5%vrFCt$>e5DH!Jh zr#)ZZTt5?txA&YmIaOVo;_^`EC^I_KklPEOi^x12UCv59{lYUzfe&JScEa;UI#nHr zu9E|b&ADl;r~@=yF#+tQ>@#)wfauvQpxMNrvYg8hUCw}o5ZxBCw`}SxBX-DSACXDK=)-Y0bs11&=;S25ha*Z65dS(2 zk-vT|a_6#NoR>-nntsq+PM2Z2alVh z0)=+{lBA83+0=C#2+FB8^wsihfs#79e6M-YjIjV&zi_%7&GLb?&<;M9oecE7cZnpS zQ%slshUL!n7VT^!2Uy`z94Pw2M#z;NKxu?6>&zr=i8d+CQ!J226vf`ZGSGhE{2Hs6 zIr@FR4`08hGUtcXQ9!n?L=Ss1LWqdFqbfDW#ELO;d6iAmqP+Z##diy5)c16A*k4^F zATnZfSA*l@uVXvbtF|YlY7yE4$ofcaYq-LY;oOp#yg1K($p_(g=WWPR9$i*MKtnf6 zG<=%n4j#I>?#!k!k7Mz!Hd@X*2f9y&QR)L}MB7AHbLDgwgKwt92|0?VN4||GFl6hR z$pzOVPM4JC53)rm$D8RxNwOB_-`+94a;UD-;8mdF#r=t!JaW|*nk_FB?4@IS(!njN zsI!Hbdsrh^$U~mRGdt93zO^YjSH{}K%i*r6Id3e6<*GWTMRA8Vrlegou}~#!&<=u% zM(YawShqtk`Qb-G3#0ujBv9WzbOgbX3RQvhj^>~642yycI|XGN9$5=3Z^bxkc2&^_ zT)anhD{!yNGD}rA(-`SO`N6T4`!$>Tvi+%&Kg38{08p`urmsQs4z9ts!$5$-kYdc zs!mFqQ67ZjpS05%x{cc-AqLiD_G^ACYV#$*({efUWs4SFw1bMDBKq}JVcI~Ha_gCB8HH{*SDRD4|{sf zmyksW%R$o+ifr;R!Db17${DNa5HcK`)M?G^yq^}F(pCUf+jzoAn6u%19`nP0dZ@AF z-bn|;C|8qG?ynA?C<+ee0+LSoBaB0<2oFtOqqHsF$REZAI+6j_aU`Nsc34tlABw{p z3pN;QPX6>wy1^K$t>VCgB13&+k%}%MdfoENKS{tZO)dNCm)C2!DqTU;j+^_!C_#!$ zleELw$JjR>8bMparvTuIS@^l@MH}N201Goayo6fw_N+L~``Tg6?1g;Do0_{toHV|Z zwB~3BPD{IEmwd{nB782yUEP~78$f{ZiVfg_ztS;#Y3-xiMZ92YUDnWvRwpd52^0Dj zGhlh}O0QbF&w4IQh&vHe0;IqSxV()G4+}Bv+%CCwV&ww!{qjO~j$-&!PH&J#EvK!+ zZWhqFivG$?Bq+a?7eT?xbMEur6+edwliq(;>g@wdaSLAd)^7c|qzjoYyVGXbArCez z*&Sx!VkxxSqCpLR9&$5XE*G=7+ZCfyd;XU@$yNEOWMk%V`+-6-A-IUfZWUH$3Yfn^ zc1HrydRQ?Z(XgiDpvRN5qFWp4#pNHp9g=@Q&s zCz2ad1ce;#{h7-D6*1XnNKZbWEYAAHKT02(f zw{vwVa7Hsmz{ipZl?qeXNS3i5UX=K!?ZL= zH_LmKzS8>p_SwIj=vBq@NQt!6x1W|HilyUw`?oSBM-?2JRpav*_WFPRdU<_Ily+92 zrt_L$#*U9%V=f=m2lYc~?q^hmokN3o0rlM&g8C`22#n3J*tJe;gw2`Q_t| zph3#(*3y{Cm%0xA!CX!2blcY4Ctb|d1*;8|izTm8{b$0w?Aw_9Y@JoFDD`}=DKP87 z@Z{LT>Ov4Vn#`BW!yo9r)q|1cc|7p5I3gD<`QI0P0U&asITt z6*o}TD4HkrspCrCNyDi1@eFO^l0b6T@?*N-+|sMxF3E&}BZ4tQ`&T8ig{%fPK$4Za zI{e?v-7FN6^A+BcH2CsL4`Qjs*d$1Bmv^RM;pSi3Zm&9jNt=MVoKD7CuPSLlFjh@h zE&4NS<9h3JAP3t8v*jyA8kufku}D5QBmAbmSUgpIv?qPC4&2(2539&}aqDh|{Xrgt zvyvH0mF#c;s`A>=iS^futR;(BJ92_e2pS|(*?q?y9@>=Zl&YJK z;}faB0j<3>W#G%J9IdIXgVI9=;H)ETTdQ*h^wYzF+=Riedu%T~x-N~aF9(}?6!B;C z_}DZK7PNJ-nyjn7zR4F@QQt?%U!bQUmIrfk@<_AM>Gss1u9BJd9}JzwFX(2C6HpCW z9eDLVo;F^Zm4u%Tpw?8`+Dnp9>Q-^(NwHS$T@Tv5vH;I$$yEjvz_NWa9o82TIw8_7 z>e=XjVH996q${1yj|c8*O~_u-h7JhwLYP#;-}yysV%u9fB!$J*8f%`MCbUO&mBs&K?v!vxbW-Odikv2QqL0WOuL zFCgvX8zP*SK>(RREa}*!v!LK|l)?*|Lca`au<#`O=rGe0@a- zrn)vS0T&DKk9V8H)-qCF>pyrX;_h%f5sx=G;O73x`Qa$Xibh~y9!k$GEJ`$RTupQ^ zSg^MVSDP~wJ2~~AUVoXiQm6FzloKTzZ8~7hRfPub`;-U)uds|}M_cp+aAR-ZoZT0H@&*kYh5ckLd0BT^qbZW@^NHAt*Dr~kHEG+lr2U@ zj|hu^)2gG1c#O&>r4sMsm{Ul>ktEf3M=h;tB!{3}IMwI2$~j?eHG++9dx^&S`ZJVX ze8XDzbrUqXSq67)X&#JR=g}dO&vSRuJD$oNU+UN{mP)*4Ye zA4D4>9c?3zg#wfseS)Ra<(@pMLVlTOU)ybK!cCiv2!p3ded=u3A#(~jG~L*3`WvZ$ zIZd^xYL*T~ex4ye_`n?GA)v)FD|k7L6y6KVKHruto=A=@$hpO@h`dApcK&3{?Vb-U zoCCil&x&VYY|C2qcKS10|5-9x@fqJRxX4VpGKteNm^jEdW`Qlvc*_J%sap*I2C-9@ z{vpz*b<4;f*Sd!idCo0nCMbCWv?}drAD;HZrEgGAH34?Z-z^_GbRX{dx3w%rrT_4S z8t%rx^sd>5hMZ@Me}<*C>w5xTCT%6!<;lggGXYm<-u;mSLn?H;Q)j_M4=*hVeNNgRkZg@3Z8FJ*T3Hk&}Uu zzAsZ$AKflyX1QBdF0hfg#vCVJ+C2s3jKdR&=55pQ4@H{9a#90c7?{l5btB}LeSY-3 zVU^n)qkLukoUNPvJy(6=f=iQ#r)09lu{UWbzl=C1@1b?247kxBXDIG0CIi-l<1fD{ Z$(iO>E@?EQ0ek6lH?)kd*JwIE{2ztiF(?24 literal 0 HcmV?d00001 diff --git a/docs/html/guide/topics/resources/res-selection-flowchart.vsd b/docs/html/guide/topics/resources/res-selection-flowchart.vsd new file mode 100755 index 0000000000000000000000000000000000000000..65bfcdb2cd29c98a72a6035fd4c26596fa07ac8b GIT binary patch literal 56320 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/html/guide/topics/resources/resources-i18n.jd b/docs/html/guide/topics/resources/resources-i18n.jd old mode 100644 new mode 100755 index 4bbb44ac5e5a2..6900704af4969 --- a/docs/html/guide/topics/resources/resources-i18n.jd +++ b/docs/html/guide/topics/resources/resources-i18n.jd @@ -1,713 +1,716 @@ -page.title=Resources and Internationalization -parent.title=Resources and Assets -parent.link=index.html -@jd:body - - - -

Resources are external files (that is, non-code files) that are used by -your code and compiled into your application at build time. Android -supports a number of different kinds of resource files, including XML, -PNG, and JPEG files. The XML files have very different formats depending -on what they describe. This document describes what kinds of files are -supported, and the syntax or format of each.

-

Resources are externalized from source code, and XML files are compiled into -a binary, fast loading format for efficiency reasons. Strings, likewise are compressed -into a more efficient storage form. It is for these reasons that we have these -different resource types in the Android platform.

- -

This is a fairly technically dense document, and together with the -Available Resources -document, they cover a lot of information about resources. It is not necessary -to know this document by heart to use Android, but rather to know that the -information is here when you need it.

- - -

Introduction

- -

This topic includes a terminology list associated with resources, and a series - of examples of using resources in code. For a complete guide to the supported - Android resource types, see - Available Resources. -

-

The Android resource system keeps track of all non-code - assets associated with an application. You use the - {@link android.content.res.Resources Resources} class to access your - application's resources; the Resources instance associated with your - application can generally be found through - {@link android.content.Context#getResources Context.getResources()}.

-

An application's resources are compiled into the application -binary at build time for you by the build system. To use a resource, -you must install it correctly in the source tree and build your -application. As part of the build process, symbols for each -of the resources are generated that you can use in your source -code -- this allows the compiler to verify that your application code matches -up with the resources you defined.

- -

The rest of this section is organized as a tutorial on how to -use resources in an application.

- - -

Creating Resources

- -

Android supports string, bitmap, and many other types of resource. The syntax and format -of each, and where they're stored, depends upon the type of object. In -general, though, you create resources from three types of files: XML files -(everything but bitmaps and raw), bitmap files(for images) and Raw files (anything -else, for example sound files, etc.). In fact, there are two different types of -XML file as well, those that get compiled as-is into the package, and those that -are used to generate resources by aapt. Here is a list of each -resource type, the format of the file, a description of the file, and details -of any XML files.

- -

You will create and store your resource files under the appropriate -subdirectory under the res/ directory in your project. Android -has a resource compiler (aapt) that compiles resources according to which -subfolder they are in, and the format of the file. Here is a list of the file -types for each resource. See the -Available Resources for -descriptions of each type of object, the syntax, and the format or syntax of -the containing file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DirectoryResource Types
res/anim/XML files that are compiled into - frame by - frame animation or - tweened - animation objects
res/drawable/

.png, .9.png, .jpg files that are compiled into the following - Drawable resource subtypes:

- -

To get a resource of this type, use mContext.getResources().getDrawable(R.drawable.imageId)

-

Note: Image resources placed in here may - be automatically optimized with lossless image compression by the - aapt tool. For example, a true-color PNG - that does not require more than 256 colors may be converted to an 8-bit PNG with a color palette. - This will result in an image of equal quality but which requires less memory. So be aware that the - image binaries placed in this directory can change during the build. If you plan on reading - an image as a bit stream in order to convert it to a bitmap, put your images in the - res/raw/ folder instead, where they will not be optimized.

-
res/layout/XML files that are compiled into screen layouts (or part of a screen). - See Declaring Layout.
res/values/

XML files that can be compiled into many kinds of resource.

-

Note: Unlike the other res/ folders, this one - can hold any number of files that hold descriptions of resources to create - rather than the resources themselves. The XML element types control - where these resources are placed under the R class.

-

While the files can be named anything, these are - the typical files in this folder (the convention is to name - the file after the type of elements defined within):

-
    -
  • arrays.xml to define arrays
  • - -
  • colors.xml to define color - drawables and color string values. - Use Resources.getDrawable() and - Resources.getColor(), respectively, - to get these resources.
  • -
  • dimens.xml to define dimension value. Use Resources.getDimension() to get - these resources.
  • -
  • strings.xml to define string values (use either - Resources.getString or preferably Resources.getText() - to get - these resources. getText() will retain any rich text styling - which is usually desirable for UI strings.
  • -
  • styles.xml to define style objects.
  • -
res/xml/Arbitrary XML files that are compiled and can be read at run time by - calling {@link android.content.res.Resources#getXml(int) Resources.getXML()}.
res/raw/Arbitrary files to copy directly to the device. They are added uncompiled - to the compressed file that your application build produces. To use these - resources in your application, call {@link android.content.res.Resources#openRawResource(int) - Resources.openRawResource()} with the resource ID, which is R.raw.somefilename.
-

Resources are compiled into the final APK file. Android creates a wrapper class, - called R, that you can use to refer to these resources in your code. R contains subclasses - named according to the path and file name of the source file

- -

Global Resource Notes

-
    -
  • Several resources allow you to define colors. Android accepts color values - written in various web-style formats -- a hexadecimal constant in any of the - following forms: #RGB, #ARGB, #RRGGBB, #AARRGGBB.
  • -
  • All color values support setting an alpha channel value, where the first - two hexadecimal numbers specify the transparency. Zero in the alpha channel - means transparent. The default value is opaque.
  • -
- -

Using Resources

-

This section describes how to use the resources you've created. It includes the - following topics:

- -

At compile time, Android generates a class named R that contains resource identifiers - to all the resources in your program. This class contains several subclasses, - one for each type of resource supported by Android, and for which you provided - a resource file. Each class contains one or more identifiers for the compiled resources, - that you use in your code to load the resource. Here is a small resource file - that contains string, layout (screens or parts of screens), and image resources.

-

Note: the R class is an auto-generated file and is not -designed to be edited by hand. It will be automatically re-created as needed when -the resources are updated.

-
package com.android.samples;
-public final class R {
-    public static final class string {
-        public static final int greeting=0x0204000e;
-        public static final int start_button_text=0x02040001;
-        public static final int submit_button_text=0x02040008;
-        public static final int main_screen_title=0x0204000a;
-    };
-    public static final class layout {
-        public static final int start_screen=0x02070000;
-        public static final int new_user_pane=0x02070001;
-        public static final int select_user_list=0x02070002;
-
-    };
-    public static final class drawable {
-        public static final int company_logo=0x02020005;
-        public static final int smiling_cat=0x02020006;
-        public static final int yellow_fade_background=0x02020007;
-        public static final int stretch_button_1=0x02020008;
-
-    };
-};
-
- -

Using Resources in Code

- -

Using resources in code is just a matter of knowing the full resource ID -and what type of object your resource has been compiled into. Here is the -syntax for referring to a resource:

-

R.resource_type.resource_name

-

or

-

android.R.resource_type.resource_name

- -

Where resource_type is the R subclass that holds a specific type -of resource. resource_name is the name attribute for resources -defined in XML files, or the file name (without the extension) for resources -defined by other file types. Each type of resource will be added to a specific -R subclass, depending on the type of resource it is; to learn which R subclass -hosts your compiled resource type, consult the -Available Resources document. Resources compiled by your own application can -be referred to without a package name (simply as -R.resource_type.resource_name). Android contains -a number of standard resources, such as screen styles and button backgrounds. To -refer to these in code, you must qualify them with android, as in -android.R.drawable.button_background.

- -

Here are some good and bad examples of using compiled resources in code:

- -
// Load a background for the current screen from a drawable resource.
-this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
-
-// WRONG Sending a string resource reference into a 
-// method that expects a string.
-this.getWindow().setTitle(R.string.main_title);
-
-// RIGHT Need to get the title from the Resources wrapper.
-this.getWindow().setTitle(Resources.getText(R.string.main_title));
-
-// Load a custom layout for the current screen.
-setContentView(R.layout.main_screen);
-
-// Set a slide in animation for a ViewFlipper object.
-mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, 
-        R.anim.hyperspace_in));
-
-// Set the text on a TextView object.
-TextView msgTextView = (TextView)findViewByID(R.id.msg);
-msgTextView.setText(R.string.hello_message); 
- - -

References to Resources

- -

A value supplied in an attribute (or resource) can also be a reference to -a resource. This is often used in layout files to supply strings (so they -can be localized) and images (which exist in another file), though a reference -can be any resource type including colors and integers.

- -

For example, if we have -color -resources, we can write a layout file that sets the text color size to be -the value contained in one of those resources:

- -
-<?xml version="1.0" encoding="utf-8"?>
-<EditText id="text"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent" android:layout_height="fill_parent"
-    android:textColor="@color/opaque_red"
-    android:text="Hello, World!" />
-
- -

Note here the use of the '@' prefix to introduce a resource reference -- the -text following that is the name of a resource in the form -of @[package:]type/name. In this case we didn't need to specify -the package because we are referencing a resource in our own package. To -reference a system resource, you would need to write:

- -
-<?xml version="1.0" encoding="utf-8"?>
-<EditText id="text"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent" android:layout_height="fill_parent"
-    android:textColor="@android:color/opaque_red"
-    android:text="Hello, World!" />
-
- -

As another example, you should always use resource references when supplying -strings in a layout file so that they can be localized:

- -
-<?xml version="1.0" encoding="utf-8"?>
-<EditText id="text"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent" android:layout_height="fill_parent"
-    android:textColor="@android:color/opaque_red"
-    android:text="@string/hello_world" />
-
- -

This facility can also be used to create references between resources. -For example, we can create new drawable resources that are aliases for -existing images:

- -
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <drawable id="my_background">@android:drawable/theme2_background</drawable>
-</resources>
-
- - -

References to Theme Attributes

- -

Another kind of resource value allows you to reference the value of an -attribute in the current theme. This attribute reference can only -be used in style resources and XML attributes; it allows you to customize the -look of UI elements by changing them to standard variations supplied by the -current theme, instead of supplying more concrete values.

- -

As an example, we can use this in our layout to set the text color to -one of the standard colors defined in the base system theme:

- -
-<?xml version="1.0" encoding="utf-8"?>
-<EditText id="text"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent" android:layout_height="fill_parent"
-    android:textColor="?android:textDisabledColor"
-    android:text="@string/hello_world" />
-
- -

Note that this is very similar to a resource reference, except we are using -an '?' prefix instead of '@'. When you use this markup, you are supplying -the name of an attribute resource that will be looked up in the theme -- -because the resource tool knows that an attribute resource is expected, -you do not need to explicitly state the type (which would be -?android:attr/android:textDisabledColor).

- -

Other than using this resource identifier to find the value in the -theme instead of raw resources, the name syntax is identical to the '@' format: -?[namespace:]type/name with the type here being optional.

- - -

Using System Resources

- -

Many resources included with the system are available to applications. -All such resources are defined under the class "android.R". For example, -you can display the standard application icon in a screen with the following -code:

- -
-public class MyActivity extends Activity
-{
-    public void onStart() 
-    {
-        requestScreenFeatures(FEATURE_BADGE_IMAGE);
-
-        super.onStart();
-
-        setBadgeResource(android.R.drawable.sym_def_app_icon);
-    }
-}
-
- -

In a similar way, this code will apply to your screen the standard -"green background" visual treatment defined by the system:

- -
-public class MyActivity extends Activity
-{
-    public void onStart() 
-    {
-        super.onStart();
-
-        setTheme(android.R.style.Theme_Black);
-    }
-}
-
- - -

Alternate Resources (for alternate languages and configurations)

- -

You can supply different resources for your product according to the UI -language or hardware configuration on the device. Note that although you can -include different string, layout, and other resources, the SDK does not expose -methods to let you specify which alternate resource set to load. Android -detects the proper set for the hardware and location, and loads them as -appropriate. Users can select alternate language settings using the settings -panel on the device.

-

To include alternate resources, create parallel resource folders with -qualifiers appended to the folder names, indicating the configuration it -applies to (language, screen orientation, and so on). For example, here is a -project that holds one string resource file for English, and another for -French:

- -
-MyApp/
-    res/
-        values-en/
-            strings.xml
-        values-fr/
-            strings.xml
-
- -

Android supports several types of qualifiers, with various values for each. -Append these to the end of the resource folder name, separated by dashes. You -can add multiple qualifiers to each folder name, but they must appear in the -order they are listed here. For example, a folder containing drawable -resources for a fully specified configuration would look like:

- -
-MyApp/
-    res/
-        drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
-
- -

More typically, you will only specify a few specific configuration options -that a resource is defined for. You may drop any of the values from the -complete list, as long as the remaining values are still in the same -order:

- -
-MyApp/
-    res/
-        drawable-en-rUS-finger/
-        drawable-port/
-        drawable-port-160dpi/
-        drawable-qwerty/
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Qualifier Values
LanguageThe two letter ISO - 639-1 language code in lowercase. For example: - en, fr, es
RegionThe two letter - ISO - 3166-1-alpha-2 language code in uppercase preceded by a lowercase - "r". For example: rUS, rFR, rES
Screen orientationport, land, square
Screen pixel density92dpi, 108dpi, etc.
Touchscreen typenotouch, stylus, finger
Whether the keyboard is available to the userkeysexposed, keyshidden
Primary text input methodnokeys, qwerty, 12key
Primary non-touchscreen
- navigation method
nonav, dpad, trackball, wheel
Screen dimensions320x240, 640x480, etc. The larger dimension - must be specified first.
- -

This list does not include device-specific parameters such as carrier, -branding, device/hardware, or manufacturer. Everything that an application -needs to know about the device that it is running on is encoded via the -resource qualifiers in the table above.

- -

Here are some general guidelines on qualified resource directory names:

- -
    -
  • Values are separated by a dash (as well as a dash after the base directory - name)
  • -
  • Values are case-sensitive (even though they must be unique across all folder - names in a case-insensitive way)
    For example,
  • -
      -
    • A portrait-specific drawable directory must be named - drawable-port, not drawable-PORT.
    • -
    • You may not have two directories named drawable-port - and drawable-PORT, even if you had intended "port" and - "PORT" to refer to different parameter values.
    • -
    -
  • Only one value for each qualifier type is supported (that is, you cannot - specify drawable-rEN-rFR/)
  • -
  • You can specify multiple parameters to define specific configurations, - but they must always be in the order listed above. - For example, drawable-en-rUS-land will apply to landscape view, - US-English devices.
  • -
  • Android will try to find the most specific matching directory for the current - configuration, as described below
  • -
  • The order of parameters listed in this table is used to break a tie in case - of multiple qualified directories (see the example given below)
  • -
  • All directories, both qualified and unqualified, live under the res/ folder. - Qualified directories cannot be nested (you cannot have res/drawable/drawable-en)
  • -
  • All resources will be referenced in code or resource reference syntax by - their simple, undecorated name. So if a resource is named this:
    -       MyApp/res/drawable-port-92dp/myimage.png
    - It would be referenced as this:
    -       R.drawable.myimage (code)
    -       @drawable/myimage (XML)
  • -
- -

How Android finds the best matching directory

- -

Android will pick which of the various underlying resource files should be -used at runtime, depending on the current configuration. The selection process -is as follows:

- -
    -
  1. - Eliminate any resources whose configuration does not match the current - device configuration. For example, if the screen pixel density is 108dpi, - this would eliminate only MyApp/res/drawable-port-92dpi/. -
    -
    -MyApp/res/drawable/myimage.png
    -MyApp/res/drawable-en/myimage.png
    -MyApp/res/drawable-port/myimage.png
    -MyApp/res/drawable-port-92dpi/myimage.png
    -
    -
    -
  2. -
  3. - Pick the resources with the highest number of matching configurations. - For example, if our locale is en-GB and orientation is port, then we - have two candidates with one matching configuration each: - MyApp/res/drawable-en/ and MyApp/res/drawable-port/. - The directory MyApp/res/drawable/ is eliminated because - it has zero matching configurations, while the others have one matching - configuration. -
    -
    -MyApp/res/drawable/myimage.png
    -MyApp/res/drawable-en/myimage.png
    -MyApp/res/drawable-port/myimage.png
    -
    -
    -
  4. -
  5. - Pick the final matching file based on configuration precedence, which - is the order of parameters listed in the table above. That is, it is - more important to match the language than the orientation, so we break - the tie by picking the language-specific file, MyApp/res/drawable-en/. -
    -
    MyApp/res/drawable-en/myimage.png
    -MyApp/res/drawable-port/myimage.png
    -
    -
    -
  6. -
- - -

Terminology

- -

The resource system brings a number of different pieces together to -form the final complete resource functionality. To help understand the -overall system, here are some brief definitions of the core concepts and -components you will encounter in using it:

- -

Asset: A single blob of data associated with an application. This -includes object files compiled from the Java source code, graphics (such as PNG -images), XML files, etc. These files are organized in a directory hierarchy -that, during final packaging of the application, is bundled together into a -single ZIP file.

- -

aapt: Android Asset Packaging Tool. The tool that generates the -final ZIP file of application assets. In addition to collecting raw assets -together, it also parses resource definitions into binary asset data.

- -

Resource Table: A special asset that aapt generates for you, -describing all of the resources contained in an application/package. -This file is accessed for you by the Resources class; it is not touched -directly by applications.

- -

Resource: An entry in the Resource Table describing a single -named value. Broadly, there are two types of resources: primitives and -bags.

- -

Resource Identifier: In the Resource Table all resources are -identified by a unique integer number. In source code (resource descriptions, -XML files, Java source code) you can use symbolic names that stand as constants for -the actual resource identifier integer.

- -

Primitive Resource: All primitive resources can be written as a -simple string, using formatting to describe a variety of primitive types -included in the resource system: integers, colors, strings, references to -other resources, etc. Complex resources, such as bitmaps and XML -describes, are stored as a primitive string resource whose value is the path -of the underlying Asset holding its actual data.

- -

Bag Resource: A special kind of resource entry that, instead of a -simple string, holds an arbitrary list of name/value pairs. Each name is -itself a resource identifier, and each value can hold -the same kinds of string formatted data as a normal resource. Bags also -support inheritance: a bag can inherit the values from another bag, selectively -replacing or extending them to generate its own contents.

- -

Kind: The resource kind is a way to organize resource identifiers -for various purposes. For example, drawable resources are used to -instantiate Drawable objects, so their data is a primitive resource containing -either a color constant or string path to a bitmap or XML asset. Other -common resource kinds are string (localized string primitives), color -(color primitives), layout (a string path to an XML asset describing a view -layout), and style (a bag resource describing user interface attributes). -There is also a standard "attr" resource kind, which defines the resource -identifiers to be used for naming bag items and XML attributes

- -

Style: The name of the resource kind containing bags that are used -to supply a set of user interface attributes. For example, a TextView class may -be given a style resource that defines its text size, color, and alignment. -In a layout XML file, you associate a style with a bag using the "style" -attribute, whose value is the name of the style resource.

- -

Style Class: Specifies a related set of attribute resources. -This data is not placed in the resource table itself, but used to generate -constants in the source code that make it easier for you to retrieve values out of -a style resource and/or XML tag's attributes. For example, the -Android platform defines a "View" style class that -contains all of the standard view attributes: padding, visibility, -background, etc.; when View is inflated it uses this style class to -retrieve those values from the XML file (at which point style and theme -information is applied as approriate) and load them into its instance.

- -

Configuration: For any particular resource identifier, there may be -multiple different available values depending on the current configuration. -The configuration includes the locale (language and country), screen -orientation, screen density, etc. The current configuration is used to -select which resource values are in effect when the resource table is -loaded.

- -

Theme: A standard style resource that supplies global -attribute values for a particular context. For example, when writing an -Activity the application developer can select a standard theme to use, such -as the Theme.White or Theme.Black styles; this style supplies information -such as the screen background image/color, default text color, button style, -text editor style, text size, etc. When inflating a layout resource, most -values for widgets (the text color, selector, background) if not explicitly -set will come from the current theme; style and attribute -values supplied in the layout can also assign their value from explicitly -named values in the theme attributes if desired.

- -

Overlay: A resource table that does not define a new set of resources, -but instead replaces the values of resources that are in another resource table. -Like a configuration, this is applied at load time -to the resource data; it can add new configuration values (for example -strings in a new locale), replace existing values (for example change -the standard white background image to a "Hello Kitty" background image), -and modify resource bags (for example change the font size of the Theme.White -style to have an 18 pt font size). This is the facility that allows the -user to select between different global appearances of their device, or -download files with new appearances.

- -

Resource Reference

-

The Available Resources -document provides a detailed list of the various types of resource and how to use them -from within the Java source code, or from other references.

- - -

Internationalization and Localization

-

Coming Soon: Internationalization and Localization are -critical, but are also not quite ready yet in the current SDK. As the -SDK matures, this section will contain information on the Internationalization -and Localization features of the Android platform. In the meantime, it is a good -idea to start by externalizing all strings, and practicing good structure in -creating and using resources.

- +page.title=Resources and Internationalization +parent.title=Resources and Assets +parent.link=index.html +@jd:body + + + +

Resources are external files (that is, non-code files) that are used by +your code and compiled into your application at build time. Android +supports a number of different kinds of resource files, including XML, +PNG, and JPEG files. The XML files have very different formats depending +on what they describe. This document describes what kinds of files are +supported, and the syntax or format of each.

+

Resources are externalized from source code, and XML files are compiled into +a binary, fast loading format for efficiency reasons. Strings, likewise, are compressed +into a more efficient storage form. It is for these reasons that we have these +different resource types in the Android platform.

+ +

This is a fairly technically dense document, and together with the +Available Resources +document, they cover a lot of information about resources. It is not necessary +to know this document by heart to use Android, but rather to know that the +information is here when you need it.

+ + +

Introduction

+ +

This topic includes a terminology list associated with resources, and a series + of examples of using resources in code. For a complete guide to the supported + Android resource types, see + Available Resources. +

+

The Android resource system keeps track of all non-code + assets associated with an application. You use the + {@link android.content.res.Resources Resources} class to access your + application's resources; the Resources instance associated with your + application can generally be found through + {@link android.content.Context#getResources Context.getResources()}.

+

An application's resources are compiled into the application +binary at build time for you by the build system. To use a resource, +you must install it correctly in the source tree and build your +application. As part of the build process, symbols for each +of the resources are generated that you can use in your source +code -- this allows the compiler to verify that your application code matches +up with the resources you defined.

+ +

The rest of this section is organized as a tutorial on how to +use resources in an application.

+ + +

Creating Resources

+ +

Android supports string, bitmap, and many other types of resource. The syntax and format +of each, and where they're stored, depends upon the type of object. In +general, though, you create resources from three types of files: XML files +(everything but bitmaps and raw), bitmap files(for images) and Raw files (anything +else, for example sound files, etc.). In fact, there are two different types of +XML file as well, those that get compiled as-is into the package, and those that +are used to generate resources by aapt. Here is a list of each +resource type, the format of the file, a description of the file, and details +of any XML files.

+ +

You will create and store your resource files under the appropriate +subdirectory under the res/ directory in your project. Android +has a resource compiler (aapt) that compiles resources according to which +subfolder they are in, and the format of the file. Table 1 shows a llist of the file +types for each resource. See the +Available Resources for +descriptions of each type of object, the syntax, and the format or syntax of +the containing file.

+

Table 1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DirectoryResource Types
res/anim/XML files that are compiled into + frame by + frame animation or + tweened + animation objects
res/drawable/

.png, .9.png, .jpg files that are compiled into the following + Drawable resource subtypes:

+ +

To get a resource of this type, use mContext.getResources().getDrawable(R.drawable.imageId)

+

Note: Image resources placed in here may + be automatically optimized with lossless image compression by the + aapt tool. For example, a true-color PNG + that does not require more than 256 colors may be converted to an 8-bit PNG with a color palette. + This will result in an image of equal quality but which requires less memory. So be aware that the + image binaries placed in this directory can change during the build. If you plan on reading + an image as a bit stream in order to convert it to a bitmap, put your images in the + res/raw/ folder instead, where they will not be optimized.

+
res/layout/XML files that are compiled into screen layouts (or part of a screen). + See Declaring Layout.
res/values/

XML files that can be compiled into many kinds of resource.

+

Note: Unlike the other res/ folders, this one + can hold any number of files that hold descriptions of resources to create + rather than the resources themselves. The XML element types control + where these resources are placed under the R class.

+

While the files can be named anything, these are + the typical files in this folder (the convention is to name + the file after the type of elements defined within):

+
    +
  • arrays.xml to define arrays
  • + +
  • colors.xml to define color + drawables and color string values. + Use Resources.getDrawable() and + Resources.getColor(), respectively, + to get these resources.
  • +
  • dimens.xml to define dimension value. Use Resources.getDimension() to get + these resources.
  • +
  • strings.xml to define string values (use either + Resources.getString or preferably Resources.getText() + to get + these resources. getText() will retain any rich text styling + which is usually desirable for UI strings.
  • +
  • styles.xml to define style objects.
  • +
res/xml/Arbitrary XML files that are compiled and can be read at run time by + calling {@link android.content.res.Resources#getXml(int) Resources.getXML()}.
res/raw/Arbitrary files to copy directly to the device. They are added uncompiled + to the compressed file that your application build produces. To use these + resources in your application, call {@link android.content.res.Resources#openRawResource(int) + Resources.openRawResource()} with the resource ID, which is R.raw.somefilename.
+

Resources are compiled into the final APK file. Android creates a wrapper class, + called R, that you can use to refer to these resources in your code. R contains subclasses + named according to the path and file name of the source file

+ +

Global Resource Notes

+
    +
  • Several resources allow you to define colors. Android accepts color values + written in various web-style formats -- a hexadecimal constant in any of the + following forms: #RGB, #ARGB, #RRGGBB, #AARRGGBB.
  • +
  • All color values support setting an alpha channel value, where the first + two hexadecimal numbers specify the transparency. Zero in the alpha channel + means transparent. The default value is opaque.
  • +
+ +

Using Resources

+

This section describes how to use the resources you've created. It includes the + following topics:

+ +

At compile time, Android generates a class named R that contains resource identifiers + to all the resources in your program. This class contains several subclasses, + one for each type of resource supported by Android, and for which you provided + a resource file. Each class contains one or more identifiers for the compiled resources, + that you use in your code to load the resource. Here is a small resource file + that contains string, layout (screens or parts of screens), and image resources.

+

Note: the R class is an auto-generated file and is not +designed to be edited by hand. It will be automatically re-created as needed when +the resources are updated.

+
package com.android.samples;
+public final class R {
+    public static final class string {
+        public static final int greeting=0x0204000e;
+        public static final int start_button_text=0x02040001;
+        public static final int submit_button_text=0x02040008;
+        public static final int main_screen_title=0x0204000a;
+    };
+    public static final class layout {
+        public static final int start_screen=0x02070000;
+        public static final int new_user_pane=0x02070001;
+        public static final int select_user_list=0x02070002;
+
+    };
+    public static final class drawable {
+        public static final int company_logo=0x02020005;
+        public static final int smiling_cat=0x02020006;
+        public static final int yellow_fade_background=0x02020007;
+        public static final int stretch_button_1=0x02020008;
+
+    };
+};
+
+ +

Using Resources in Code

+ +

Using resources in code is just a matter of knowing the full resource ID +and what type of object your resource has been compiled into. Here is the +syntax for referring to a resource:

+

R.resource_type.resource_name

+

or

+

android.R.resource_type.resource_name

+ +

Where resource_type is the R subclass that holds a specific type +of resource. resource_name is the name attribute for resources +defined in XML files, or the file name (without the extension) for resources +defined by other file types. Each type of resource will be added to a specific +R subclass, depending on the type of resource it is; to learn which R subclass +hosts your compiled resource type, consult the +Available Resources document. Resources compiled by your own application can +be referred to without a package name (simply as +R.resource_type.resource_name). Android contains +a number of standard resources, such as screen styles and button backgrounds. To +refer to these in code, you must qualify them with android, as in +android.R.drawable.button_background.

+ +

Here are some good and bad examples of using compiled resources in code:

+ +
// Load a background for the current screen from a drawable resource.
+this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
+
+// WRONG Sending a string resource reference into a 
+// method that expects a string.
+this.getWindow().setTitle(R.string.main_title);
+
+// RIGHT Need to get the title from the Resources wrapper.
+this.getWindow().setTitle(Resources.getText(R.string.main_title));
+
+// Load a custom layout for the current screen.
+setContentView(R.layout.main_screen);
+
+// Set a slide in animation for a ViewFlipper object.
+mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, 
+        R.anim.hyperspace_in));
+
+// Set the text on a TextView object.
+TextView msgTextView = (TextView)findViewByID(R.id.msg);
+msgTextView.setText(R.string.hello_message); 
+ + +

References to Resources

+ +

A value supplied in an attribute (or resource) can also be a reference to +a resource. This is often used in layout files to supply strings (so they +can be localized) and images (which exist in another file), though a reference +can be any resource type including colors and integers.

+ +

For example, if we have +color +resources, we can write a layout file that sets the text color size to be +the value contained in one of those resources:

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<EditText id="text"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent" android:layout_height="fill_parent"
+    android:textColor="@color/opaque_red"
+    android:text="Hello, World!" />
+
+ +

Note here the use of the '@' prefix to introduce a resource reference -- the +text following that is the name of a resource in the form +of @[package:]type/name. In this case we didn't need to specify +the package because we are referencing a resource in our own package. To +reference a system resource, you would need to write:

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<EditText id="text"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent" android:layout_height="fill_parent"
+    android:textColor="@android:color/opaque_red"
+    android:text="Hello, World!" />
+
+ +

As another example, you should always use resource references when supplying +strings in a layout file so that they can be localized:

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<EditText id="text"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent" android:layout_height="fill_parent"
+    android:textColor="@android:color/opaque_red"
+    android:text="@string/hello_world" />
+
+ +

This facility can also be used to create references between resources. +For example, we can create new drawable resources that are aliases for +existing images:

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <drawable id="my_background">@android:drawable/theme2_background</drawable>
+</resources>
+
+ + +

References to Theme Attributes

+ +

Another kind of resource value allows you to reference the value of an +attribute in the current theme. This attribute reference can only +be used in style resources and XML attributes; it allows you to customize the +look of UI elements by changing them to standard variations supplied by the +current theme, instead of supplying more concrete values.

+ +

As an example, we can use this in our layout to set the text color to +one of the standard colors defined in the base system theme:

+ +
+<?xml version="1.0" encoding="utf-8"?>
+<EditText id="text"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent" android:layout_height="fill_parent"
+    android:textColor="?android:textDisabledColor"
+    android:text="@string/hello_world" />
+
+ +

Note that this is very similar to a resource reference, except we are using +an '?' prefix instead of '@'. When you use this markup, you are supplying +the name of an attribute resource that will be looked up in the theme -- +because the resource tool knows that an attribute resource is expected, +you do not need to explicitly state the type (which would be +?android:attr/android:textDisabledColor).

+ +

Other than using this resource identifier to find the value in the +theme instead of raw resources, the name syntax is identical to the '@' format: +?[namespace:]type/name with the type here being optional.

+ + +

Using System Resources

+ +

Many resources included with the system are available to applications. +All such resources are defined under the class "android.R". For example, +you can display the standard application icon in a screen with the following +code:

+ +
+public class MyActivity extends Activity
+{
+    public void onStart() 
+    {
+        requestScreenFeatures(FEATURE_BADGE_IMAGE);
+
+        super.onStart();
+
+        setBadgeResource(android.R.drawable.sym_def_app_icon);
+    }
+}
+
+ +

In a similar way, this code will apply to your screen the standard +"green background" visual treatment defined by the system:

+ +
+public class MyActivity extends Activity
+{
+    public void onStart() 
+    {
+        super.onStart();
+
+        setTheme(android.R.style.Theme_Black);
+    }
+}
+
+ + +

Alternate Resources (for alternate languages and configurations)

+ +

You can supply different resources for your application to use depending on the UI +language or hardware configuration on the device. Note that although you can +include different string, layout, and other resources, the SDK does not expose +methods to let you specify which alternate resource set to load. Android +detects the proper set for the hardware and location, and loads them as +appropriate. Users can select alternate language settings using the settings +panel on the device.

+

To include alternate resources, create parallel resource folders with +qualifiers appended to the folder names, indicating the configuration it +applies to (language, screen orientation, and so on). For example, here is a +project that holds one string resource file for English, and another for +French:

+ +
+MyApp/
+    res/
+        values-en/
+            strings.xml
+        values-fr/
+            strings.xml
+
+ +

Android supports several types of qualifiers, with various values for each. +Append these to the end of the resource folder name, separated by dashes. You +can add multiple qualifiers to each folder name, but they must appear in the +order they are listed here. For example, a folder containing drawable +resources for a fully specified configuration would look like this:

+ +
+MyApp/
+    res/
+        drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
+
+ +

More typically, you will only specify a few specific configuration options. You may drop any of the values from the +complete list, as long as the remaining values are still in the same +order:

+ +
+MyApp/
+    res/
+        drawable-en-rUS-finger/
+        drawable-port/
+        drawable-port-160dpi/
+        drawable-qwerty/
+
+

Table 2 lists the valid folder-name qualifiers, in order of precedence. Qualifiers that are listed higher in the table take precedence over those listed lower, as described in How Android finds the best matching directory.

+

Table 2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Qualifier Values
MCC and MNCThe mobile country code and mobile network code from the SIM in the device. For example mcc310-mnc004 (U.S., Verizon brand); mcc208-mnc00 (France, Orange brand); mcc234-mnc00 (U.K., BT brand).
+
+ If the device uses a radio connection (GSM phone), the MCC will come from the SIM, and the MNC will come from the network to which the device is attached. You might sometimes use the MCC alone, for example to include country-specific legal resources in your application. If your application specifies resources for a MCC/MNC combination, those resources can only be used if both the MCC and the MNC match.
Language and regionThe two letter ISO + 639-1 language code and two letter + ISO + 3166-1-alpha-2 region code (preceded by lowercase "r"). For example + en-rUS, fr-rFR, es-rES.
+
+ The codes are case-sensitive: The language code is lowercase, and the country code is uppercase. You cannot specify a region alone, but you can specify a language alone, for example en, fr, es.
Screen orientationport, land, square
Screen pixel density92dpi, 108dpi, etc. When Android selects which resource files to use, it handles screen density differently than the other qualifiers. In step 1 of How Android finds the best matching directory (below), screen density is always considered to be a match. In step 4, if the qualifier being considered is screen density, Android will select the best final match at that point, without any need to move on to step 5.
Touchscreen typenotouch, stylus, finger
Whether the keyboard is available to the userkeysexposed, keyshidden, keyssoft
+ If your application has specific resources that should only be used with a soft keyboard, use the keyssoft value. If no keyssoft resources are available (only keysexposed and keyshidden) and the device shows a soft keyboard, the system will use keysexposed resources.
Primary text input methodnokeys, qwerty, 12key
Primary non-touchscreen
+ navigation method
nonav, dpad, trackball, wheel
Screen dimensions320x240, 640x480, etc. The larger dimension + must be specified first.
SDK versionThe SDK version supported by the device, for example v3. The Android 1.0 SDK is v1, the 1.1 SDK is v2, and the 1.5 SDK is v3.
(Minor version)(You cannot currently specify minor version. It is always set to 0.)
+ +

This list does not include device-specific parameters such as carrier, +branding, device/hardware, or manufacturer. Everything that an application +needs to know about the device that it is running on is encoded via the +resource qualifiers in the table above.

+ +

All resource directories, qualified and unqualified, live under the res/ folder. Here are some guidelines on qualified resource directory names:

+ +
    +
  • You can specify multiple qualifiers, separated by dashes. For example, drawable-en-rUS-land will apply to US-English + devices in landscape orientation.
  • +
  • The qualifiers must be in the order listed in Table 2 above. For example: +
      +
    • Correct: values-mcc460-nokeys/
    • +
    • Incorrect: values-nokeys-mcc460/
    • +
    +
  • +
  • Values are case-sensitive. For example, a portrait-specific drawable directory must be named + drawable-port, not drawable-PORT or drawable-Port.
  • +
  • Only one value for each qualifier type is supported. For example, if you want to use exactly the same drawable files for Spain and France, you will need two resource directories, such as drawable-rES/ and drawable-rFR/, containing identical files. You cannot + have a directory named drawable-rES-rFR/.
  • +
  • Qualified directories cannot be nested. For example, you cannot have res/drawable/drawable-en.
  • +
+ +

How resources are referenced in code

+

All resources will be referenced in code or resource reference syntax by + their simple, undecorated names. So if a resource were named this:
+      MyApp/res/drawable-port-92dpi/myimage.png
+ It would be referenced as this:
+      R.drawable.myimage (code)
+      @drawable/myimage (XML)

+

If several drawable directories are available, Android will select one of them (as described below) and load myimage.png from it.

+

How Android finds the best matching directory

+ +

Android will pick which of the various underlying resource files should be +used at runtime, depending on the current configuration of the device. The example used here assumes the following device configuration:

+
+

Locale = en-GB
+ Screen orientation = port
+ Screen pixel density = 108dpi
+ Touchscreen type = notouch
+ Primary text input method = 12key
+

+
+

Here is how Android makes the selection:

+
    +
  1. + Eliminate resource files that contradict the + device configuration. For example, assume that the following resource directories are available for drawables. The drawable-fr-rCA/ directory will be eliminated, because it contradicts the locale of the device.
    +
    MyApp/res/drawable/
    +MyApp/res/drawable-en/
    +MyApp/res/drawable-fr-rCA/
    +MyApp/res/drawable-en-port/
    +MyApp/res/drawable-en-notouch-12key/
    +MyApp/res/drawable-port-92dpi/
    +MyApp/res/drawable-port-notouch-12key
    + Exception: Screen pixel density is the one qualifier that is not used to eliminate files. Even though the screen density of the device is 108 dpi, drawable-port-92dpi/ is not eliminated from the list, because every screen density is considered to be a + match at this point.
  2. +
  3. From Table 2, pick the highest-precedence qualifier that remains in the list. (Start with MCC, then move down through the list.)
  4. +
  5. Do any of the available resource directories include this qualifier?
  6. +
      +
    • If No, return to step 2 and look at the next qualifier listed in Table 2. In our example, the answer is "no" until we reach Language.
    • +
    • If Yes, move on to step 4.
    • +
    +
  7. Eliminate resource directories that do not include this qualifier. In our example, we eliminate all the directories that do not include a language qualifier.
  8. +
    MyApp/res/drawable/
    +MyApp/res/drawable-en/
    +MyApp/res/drawable-en-port/
    +MyApp/res/drawable-en-notouch-12key/
    +MyApp/res/drawable-port-92dpi/
    +MyApp/res/drawable-port-notouch-12key
    + Exception: If the qualifier in question is screen pixel density, Android will select the option that most closely matches the device, and the selection process will be complete. In general, Android will prefer scaling down a larger original image to scaling up a smaller original image.

    + +
  9. Go back and repeat steps 2, 3, and 4 until only one choice remains. In the example, screen orientation is the next qualifier in the table for which we have any matches. + Eliminate resources that do not specify a screen orientation.

    +
    MyApp/res/drawable-en/
    +MyApp/res/drawable-en-port/
    +MyApp/res/drawable-en-notouch-12key/
    + Only one choice remains, so that's it. When drawables are called for in this example application, the Android system will load resources from the MyApp/res/drawable-en-port/ directory. +
+

Tip: The precedence of the qualifiers is more important than the number of qualifiers that exactly match the device. For example, in step 4 above, the last choice on the list includes three qualifiers that exactly match the device (orientation, touchscreen type, and input method), while drawable-en has only one parameter that matches (language). However, language has a higher precedence, so drawable-port-notouch-12key is out.

+

This flowchart summarizes how Android selects resource directories to load.

+

resource-selection

+

Terminology

+

The resource system brings a number of different pieces together to +form the final complete resource functionality. To help understand the +overall system, here are some brief definitions of the core concepts and +components you will encounter in using it:

+ +

Asset: A single blob of data associated with an application. This +includes object files compiled from the Java source code, graphics (such as PNG +images), XML files, etc. These files are organized in a directory hierarchy +that, during final packaging of the application, is bundled together into a +single ZIP file.

+ +

aapt: Android Asset Packaging Tool. The tool that generates the +final ZIP file of application assets. In addition to collecting raw assets +together, it also parses resource definitions into binary asset data.

+ +

Resource Table: A special asset that aapt generates for you, +describing all of the resources contained in an application/package. +This file is accessed for you by the Resources class; it is not touched +directly by applications.

+ +

Resource: An entry in the Resource Table describing a single +named value. Broadly, there are two types of resources: primitives and +bags.

+ +

Resource Identifier: In the Resource Table all resources are +identified by a unique integer number. In source code (resource descriptions, +XML files, Java source code) you can use symbolic names that stand as constants for +the actual resource identifier integer.

+ +

Primitive Resource: All primitive resources can be written as a +simple string, using formatting to describe a variety of primitive types +included in the resource system: integers, colors, strings, references to +other resources, etc. Complex resources, such as bitmaps and XML +describes, are stored as a primitive string resource whose value is the path +of the underlying Asset holding its actual data.

+ +

Bag Resource: A special kind of resource entry that, instead of a +simple string, holds an arbitrary list of name/value pairs. Each name is +itself a resource identifier, and each value can hold +the same kinds of string formatted data as a normal resource. Bags also +support inheritance: a bag can inherit the values from another bag, selectively +replacing or extending them to generate its own contents.

+ +

Kind: The resource kind is a way to organize resource identifiers +for various purposes. For example, drawable resources are used to +instantiate Drawable objects, so their data is a primitive resource containing +either a color constant or string path to a bitmap or XML asset. Other +common resource kinds are string (localized string primitives), color +(color primitives), layout (a string path to an XML asset describing a view +layout), and style (a bag resource describing user interface attributes). +There is also a standard "attr" resource kind, which defines the resource +identifiers to be used for naming bag items and XML attributes

+ +

Style: The name of the resource kind containing bags that are used +to supply a set of user interface attributes. For example, a TextView class may +be given a style resource that defines its text size, color, and alignment. +In a layout XML file, you associate a style with a bag using the "style" +attribute, whose value is the name of the style resource.

+ +

Style Class: Specifies a related set of attribute resources. +This data is not placed in the resource table itself, but used to generate +constants in the source code that make it easier for you to retrieve values out of +a style resource and/or XML tag's attributes. For example, the +Android platform defines a "View" style class that +contains all of the standard view attributes: padding, visibility, +background, etc.; when View is inflated it uses this style class to +retrieve those values from the XML file (at which point style and theme +information is applied as approriate) and load them into its instance.

+ +

Configuration: For any particular resource identifier, there may be +multiple different available values depending on the current configuration. +The configuration includes the locale (language and country), screen +orientation, etc. The current configuration is used to +select which resource values are in effect when the resource table is +loaded.

+ +

Theme: A standard style resource that supplies global +attribute values for a particular context. For example, when writing an +Activity the application developer can select a standard theme to use, such +as the Theme.White or Theme.Black styles; this style supplies information +such as the screen background image/color, default text color, button style, +text editor style, text size, etc. When inflating a layout resource, most +values for widgets (the text color, selector, background) if not explicitly +set will come from the current theme; style and attribute +values supplied in the layout can also assign their value from explicitly +named values in the theme attributes if desired.

+ +

Overlay: A resource table that does not define a new set of resources, +but instead replaces the values of resources that are in another resource table. +Like a configuration, this is applied at load time +to the resource data; it can add new configuration values (for example +strings in a new locale), replace existing values (for example change +the standard white background image to a "Hello Kitty" background image), +and modify resource bags (for example change the font size of the Theme.White +style to have an 18 pt font size). This is the facility that allows the +user to select between different global appearances of their device, or +download files with new appearances.

+ +

Resource Reference

+

The Available Resources +document provides a detailed list of the various types of resource and how to use them +from within the Java source code, or from other references.

+ + +

Internationalization and Localization

+

Coming Soon: Internationalization and Localization are +critical, but are also not quite ready yet in the current SDK. As the +SDK matures, this section will contain information on the Internationalization +and Localization features of the Android platform. In the meantime, it is a good +idea to start by externalizing all strings, and practicing good structure in +creating and using resources.

\ No newline at end of file