单色空间吧 关注:246贴子:9,751

<教程>虽然人不多,还是给大家分享点

只看楼主收藏回复

一楼:^_^ 以后成大神了别忘了我就好!!


1楼2014-02-05 18:27回复
    不要插楼


    2楼2014-02-05 18:27
    收起回复
      这次直接跳过第二节讲第三节,第二节我会一笔带过的。
      先了解apk,
      1. META-INF\ (注:Jar文件中常可以看到);
      2. res\ (注:存放资源文件的目录) ;
      3. AndroidManifest.xml (注:程序全局配置文件) ;
      4. classes.dex (注:Dalvik字节码,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码);
      5. resources.arsc (注:编译后的二进制资源文件,相当于资源目录一样)。


      3楼2014-02-05 18:32
      回复
        要想制作apk,可以使用Eclipse这个开发工具,这里只是提到,我不讲如何开发一款apk应用。
        今天主要讲美化,汉化时所牵扯到的res目录下的相关东西,如下:
        res目录下通常有(只提到常常牵扯的)
        anim (动画配置文件夹,如:窗口过度特效等)
        drawable (一些零散的界面图片资源,XML布局配置资源)
        drawable-hdpi(主要存放界面图片资源,hdpi是指高分辨率,即480*800+,更高的会有xdpi,xxdpi,或者1080dpi等,中等的就是mdpi,)
        layout (整个界面的布局配置,全部是XML文件)
        layout-land (布局的配置的横屏界面,所有加land基本上都是横屏布局,一般很少修改)
        values (视图界面,类似于layout,但他是layout中的布局文件中某个代码所指向的单独配置文件,汉化主修改目录)
        values-zh-rCN(上面一项的中文界面,汉化主要在这两个)


        4楼2014-02-05 18:47
        回复
          下面是美化时所涉及的五大布局详解
          Android的界面是有布局(例如layout中的XML文件)和组件(dex解包后的smali代码)协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。
          Android的五大布局分别是
          LinearLayout(线性布局)
          FrameLayout(单帧布局)
          RelativeLayout(相对布局)
          AbsoluteLayout(绝对布局)
          TableLayout(表格布局)。
            LinearLayout:
            LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。
            LinearLayout中的子元素属性android:layout_weight生效,它用于描述该子元素在剩余空间中占有的大小比例。加入一行只有一个文本框,那么它的默认值就为0,如果一行中有两个等长的文本框,那么他们的android:layout_weight值可以是同为1。如果一行中有两个不等长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余空间中的三分之一。android:layout_weight遵循数值越小,重要度越高的原则。显示效果如下:
          代码:
          1 <?xml version="1.0" encoding="utf-8"?>
          2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
          3 <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ff000000" android:text="@string/hello"/>
          4 <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent">
          5 <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ff654321" android:layout_weight="1" android:text="1"/>
          6 <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#fffedcba" android:layout_weight="2" android:text="2"/>
          7 </LinearLayout>
          8 </LinearLayout>


          5楼2014-02-05 19:21
          收起回复
            有关五大布局,今天我只讲线性布局,这个较常见,上面的看懂大概即可,知道他是像一条线一样排列即可。
            以下实例:(以修改systemui.apk中的状态栏布局为例)
            反编译后,打开res/layout目录,看到一大堆XML文件,别急,找status_bar.xml即可(拓展:有关status字样的是状态栏,bar是 栏 的意思,合起来是状态栏。)用notpad打开status_bar.xml,看到下图所示代码(这个代码布局就是我的IOS7_beta2状态栏布局。)看我用各个颜色的框框出来的部分:
            第一个框解释:这个是节点,每个小减号点击下都会收回该节点的代码,方便阅读。
            第二个框解释:
            从第一个线性布局开始即“<LinearLayout android:orientation="horizontal" android:id="@id/icons"
            到框内最后一行的</LinearLayout>为一个布局,也可以理解为一个部分,即状态栏的左半边部分,因为线性布局从左往右排列的特性,所以最先开始的一个布局就会占据该布局总区域内屏幕最左边的区域,具体宽度看其中各个子布局的大小限制。
            第三个框解释:在父布局(大的布局)中可以添加很多小的子布局,例如绿框中的第一行的<LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster"到绿框中最后一行</LinearLayout>为一个子布局, 同理,每一个线性布局都以</LinearLayout>结尾。


            6楼2014-02-05 19:51
            回复
              如:修改信号居左,就把
              <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
              放到<LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="1.0dip" android:paddingRight="1.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
              总的大布局下面,这个只是简单地提到了左边而已,对于很多ROM,有不同的,如上图中绿框部分,
              <LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:paddingLeft="1.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent">
              <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
              </LinearLayout>
              多了一个<LinearLayout android:gravity这一行(我自行添加的线性布局),为什么?原因是
              <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
              是简单地信号图标而已,虽然放到前面了,但是并不能代表他就能正常显示,如果我不自行添加一个布局来限制他的位置的话,他显示位置是最左上角,是偏得,没有与其他图标平行,我加的这一行的大意:gravity="center":重力=中间,就是在信号这一部分信号是居中的(类似于数学中的极值的概念)。android:orientation="horizontal"就是方向是横的。
              android:id="@id/signal_battery_cluster" 这个是指向id中的signal_battery_cluster这个类的代码,是在另外一个文件中配置信号图标位置(具体位置:\systemui\res\values\ids.xml)
              @”大家都知道,是提到谁,这里就是指向某个资源)


              7楼2014-02-05 20:19
              收起回复
                android:paddingLeft="1.0dip" 这个即是往左的填充像素是1dip (单位暂不解释,且区别于android:layout_marginLeft="1dip",详细属性后面再提,这都是进阶的)
                android:layout_width="wrap_content"
                android:layout_height="fill_parent">
                上面两个属性暂不讲解(比较怪异的属性,如果有人想深入研究就在后面讲解)
                只要知道第一个是宽度自适应,第二个高度自适应即可,当然你也可以改成dip
                好了,现在看整个信号块的布局,已经限制了长宽高。信号部分正常。
                如果想让信后放到最后,可以把信号块整个剪切到电池后面,随意排列,当然了,也可以将单个的模块添加进某个部分中,如第一张图,我添加了流量显示代码,
                找到:<com.android.systemui.statusbar.policy.Traffic android:textAppearance="@style/TextAppearance.StatusBar.Traffic" android:gravity="left|center" android:id="@id/traffic"
                我把它添加在了时间的最前方,显示效果就像我的那个包里的一样,时间前面是网速。


                8楼2014-02-05 20:35
                回复
                  好了,大概布局就说这些,有如下注意事项
                  1:刚开始不要随意修改,先看懂布局有几个模块,具体修改那个模块再修改。
                  2:注意代码整齐,要和它相同的一类对齐,该空格就空格。
                  3:dip是单位,但是具体大小还得看手机分辨率,在a798t上,100dip大概就是1厘米多点,这是我个人经验,不代表具体值,只供参考。
                  4:添加了指向某个资源后,图片就需要在drawable-hdpi中添加,指向XML或者style,需要向指定文件夹添加相应代码,指向style就在F:\ApkTool\systemui\res\values\styles.xml中添加相应代码,指向新的XML就在drawable中添加。
                  如我的网速显示块就指向了android:textAppearance="@style/TextAppearance.StatusBar.Traffic"
                  ,于是在\res\values\styles.xml中编辑,最后一行添加
                  <style name="TextAppearance.StatusBar.Traffic" parent="@style/TextAppearance.StatusBar.Clock">
                  <item name="android:textSize">18.0dip</item>
                  <item name="android:textStyle">normal</item>
                  <item name="android:textColor">#ffffffff</item>
                  <item name="android:textAllCaps">false</item>
                  </style>
                  用以控制其大小,字体颜色,字体样式等等,具体为什么这么添加,后面再讲,先把今天的学会就好。
                  好了,想学这些的,就好好看就行,一定要动手做才行。


                  9楼2014-02-05 20:47
                  回复
                    看晕了,咋办??


                    来自Android客户端10楼2014-02-05 21:14
                    收起回复
                      这个要自己实践了着看了 光看看的头晕 整天玩电脑的时间太少了 再者英语差劲 只能靠复制粘贴了


                      IP属地:浙江来自Android客户端11楼2014-02-05 21:23
                      收起回复
                        谢谢了


                        IP属地:浙江来自Android客户端12楼2014-02-05 21:23
                        回复


                          IP属地:浙江来自Android客户端13楼2014-02-05 21:24
                          回复
                            不明觉厉


                            来自Android客户端15楼2014-02-05 22:46
                            回复