铃铃塔吧 关注:8贴子:80
  • 0回复贴,共1

[教程] 教你修改drawable里找不到的背景

只看楼主收藏回复

前言: 有时候想修改软件的背景,但是在drawable里找不到该背景图片,这个教程主要就是讲如何修改这种背景,以微信为例。 教程的对象是已经拥有基本萌化能力的人,了解对软件反编译、回编译、签名的方法。不会的话先看看版里的其它教程吧。
使用工具:文本编辑器(推荐用notepad++),解包打包签名工具(推荐用Android萌化辅助工具,要将里面的aapt.exe更新一下才能支持微信4.5)
本方法仅对可以反编译并回编译的软件有效。
(关于微信5.0不能回编译的问题,那是因为drawable-hdpi里的app_panel_voiceviop_icon.png这张图片的格式有些问题,用画图工具再另存为png就可以了。)
正文: 说到背景,很多人以为都是图片,于是去drawable文件夹里面找。其实不然。对于一些只用颜色就可以表示的背景,一般是用颜色代码表示的,如#FF00FF00,这样可以节省空间。帖子后面有颜色代码的介绍。
知道了背景是颜色代码,怎么将它改为其它的颜色呢?如图,”微信”页的背景的纯白色的。
这个背景是在res\layout\main.xml 里
绿色框里的"@color/white" ,它表示用res\values\colors.xml里white的值作为背景颜色。 我们打开res\values\colors.xml。
可以看到white的值是#ffffffff,即纯白色。注意:如果直接改掉white的值的话,会影响到其它地方,因为不只有这个背景使用white这个值。所以我们最好在res\layout\main.xml里,将"@color/white" 直接改为你想要的颜色代码,如图:
那怎么将背景改为一张图片呢? 大家都知道,图片的资源是放在drawable-XXXX里的XXXX表示不同分辨率对应的图片资源。 我们先找一张图片当做背景,图片用小写英文或数字命名,如background.jpg,放进分辨率对应的drawable文件夹里。 将刚才的"@color/white"改为"@drawable/background"。drawable不用加-XXXX,图片不用加后缀名。
再打包签名就可以了,很简单吧,效果如下:
(注意:如果要将原来的.9.png图片替换成新的.9.png图片,必须保持.9信息相同,不然会打包失败,或者你可以替换成普通的图片,并将名字里的".9"去除即可。有关.9.png的制作方法,看这里)
为了不挡住背景,一般会将搜索框、会话背景改一下透明度。
除了drawable(图片)、color(颜色)这两种资源外,还有style(风格)资源,在res\values\styles.xml,它是字体大小、背景图片、字体颜色等的集合,有些背景是在这里改的。
修改是不难的,难的地方就是如何找到背景对应的代码在哪里。帖子后面有LZ的一些经验分享。
下面是我整理的一些背景位置(微信4.2),很容易在drawable里找到的图片就不说了: 主界面的4个页面:1. 微信 1) 背景:res\layout\main.xml <ListViewandroid:id="@id/main_chatting_lv"android:background="@color/white"…… 2) 会话条目背景:res\drawable-hdpi\ mm_chat_listitem_XXXX
2. 通讯录 1) 背景:res\layout\address.xml <ListView android:id="@id/address_contactlist"android:background="@color/white"…… 2) 条目背景: res\drawable-hdpi\mm_listitem_simple.9.png 3) 分隔条目的图片:res\drawable\mm_contact_title.9.png3. 朋友们和设置,这里用的是同一个背景 1) 背景:res\values\styles.xml <itemname="android:background">@color/navpage</item> 2) 条目背景:res\drawable\ic_preference_XXXX
其它:1. 主界面 1) 上方栏背景:res\drawable-hdpi\mmtitle_bg
2) 下方栏背景:res\drawable-hdpi\mmfooter_bg
3) 下方4个按钮选中时的背景:res\drawable-hdpi\tab_bg_halo2. 阅读器(腾讯新闻等) 1) 背景:res\layout\reader_app.xml <LinearLayout android:id="@id/chatting_bg_ll"android:background="@color/default_background_color" style="@style/NavPage" 2) 条目背景:res\drawable-hdpi\reader_news_multbg_XXXX 和 res\drawable-hdpi\reader_news_singlebg_XXXX
3. 字体颜色 "微信"页会话上的次要字体颜色、通讯录上的签名字体颜色等:@color/lightgrey
颜色代码介绍: 颜色代码是用16进制表示的,格式为#TTRRGGBB ,除了#外,有8个字符。 TT表示透明度,取值范围为00~FF (0~255),00是完全透明,FF是完全不透明。RRGGBB是RGB颜色,分别表示红色、绿色、蓝色的亮度。三者的数值范围都是00~FF (0~255)。所以#FF00FF00 就表示完全不透明的纯绿色。 获取某种颜色对应的RGB代码方法有很多,可以用PhotoShop的颜色版,也可以在百度搜RGB颜色查询对照表。
个人经验,如何找出背景位置: 1. 颜色代码一般都在res\values和res\layout这两个文件夹里,res\layout里有很多文件,这些其实是控制界面布局的文件,看文件名可以大概猜出这个文件是控制哪个界面的,如res\layout\reader_app.xml 就是阅读器的布局文件。
2. 如果确定背景是某种颜色,如白色,但是不知道它在哪个layout或style里面,可以在整个文件夹里搜索 @color/white 关键字(可以用Notepad++、Sublime等文本编辑器搜索),然后在结果里面一个一个找,最简单的方法就是将它们改为不同的颜色,打包看看效果。有能力的可以去学习一下Android的布局(layout),然后看到某个layout的结构,就可以大概判断出它控制哪个界面了。
如果将搜索出来的所有地方都改了,颜色还是没有变,那就杯具了。说明这个背景不是写在布局(layout)里的,而是直接写在程序代码里的。虽然也是可以改的,但是只能改为同一种类型的资源,也就是说原来是颜色资源,只能改为其它颜色资源,不能改为图片等资源。下面的改为其它颜色的方法:
首先在/res/values/public.xml里搜索该颜色的名字,比如说:default_background_color
看到后面的 "0x7f090042" 了吗,这是这种颜色的ID,在android里面,每一个资源都有一个特有的ID。
然后在/smali 里搜索这个ID:
就找到了这个背景在程序代码中的位置,将它改为其它ID就行了(注意要同类型的),可用的ID可以在public.xml里找。
3. 有些背景可以通过文字来查找,比如说这条搜索栏,上面有”搜索”两个字
我们打开res\values\strings.xml ,程序的文字一般都在这里。找到”搜索”,记下它的name,这里是app_search.
再在res中查找@string/app_search
搜到在res\layout\search_bar.xml有一条记录,如果是在layout里的,它就是搜索栏的布局,就可以定位到相应的图片资源或颜色了。
改了搜索栏的透明度后的效果:


1楼2014-10-27 23:28回复