在前面几篇文章中做了一些尝试,但是还无法直接用于生产环境。现在基本实现了一个可正式使用的自定义按钮。
可以看到选中后变色,而且下面的视图也相应变化,起到类似Tab的效果。
另外,用手指触摸在按钮上,也会有颜色的变化。
原来想,如果要实现touch而界面变色要实现OnTouchLisnter的,其实不用。只需为按钮设置background即可,在布局文件中,比如:
<com.easymorse.textbutton.TextButton android:id="@+id/b2"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:clickable="true" android:layout_weight="1" android:text="电视"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" />
另外要设置clickable和focusable为true,这里的background属性指向的是一个配置文件,drawable/button.xml:
在编写Android自定义按钮示例基础上,如果要指定字体大小产生这样的效果:
其实是不需要自定义变量的,可以直接使用TextView的配置属性:
<com.easymorse.textbutton.TextButton
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1" android:text="电影"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true"
android:clickable="true" android:textSize="22sp" />
日志引用
android提供了两种方式来实现无标题栏和全屏效果,即通过xml文件声明的方式和通过程序的方式。
这是无标题栏的效果:
可以和编写Android自定义按钮的图比较一下了解和带标题栏的区别。
这是全屏的效果:
写了个简单的android编写自定义效果的按钮,现在还不完整。不过效果出来了。见:
用手指按压按钮的效果:
在简单分析apk文件中的信息中可以通过AXMLPrinter命令行方式对指定的二进制xml文件做解码,并打印输出到屏幕。
这样操作一个项目比较繁琐。挤出点儿时间,在人家原有项目上增加了点儿内容。可以针对指定res目录批处理生成资源文件到指定目录下了。策略是:
- 如果是xml文件,就解码,然后在指定目标目录(新目录)下对应目录下生成同名xml解码文件;
- 如果是其他文件,则复制到目标目录对应目录下同名文件。
命令行:
java -jar axml.jar 桌面/xxx-1.apk_FILES/res ~/my.res
这里不要求创建目标目录,程序会自动建。
程序源代码:
拿到android项目,是一个apk的包。这里面包含编译后的代码和资源文件两部分。
其中资源文件的反向工程,可以参见简单分析apk文件中的信息。
而编译后的代码部分,需要借助两个工具:
- dex2jar,用于将dex文件转换为jar文件;
- jd-gui,将jar文件反向工程为java代码。
要定制android或者一些高级的用法,光看android官方文档已经不够用了。需要看看android framework源代码。
比如我想定制按钮,但是给的文档只是使用它。
android官方提供了源代码的网站:
并且发布了源代码,可以不需要注册下载源代码。不过源代码是通过git来做版本控制的。因此下载源代码需要安装git。
imdb有类似这样的效果:
不是tab做的,是自定义按钮。
为了模仿它,先写了个最简单的自定义按钮的实现: