Android程序员是苦逼的,我们不但要写Java代码,还要写布局代码,最痛苦的莫过于在布局写了一遍控件,还要在Java代码中写一遍定义,小弟对VBA语言也颇有研究,想能不能借助VBA语言来分析布局代码,自动生成Android控件的定义代码呢?花了一晚上的时间搞成功了,在此分享一下。
VBA代码如下:
Option Explicit
Sub 快速提取widget定义()
' 快捷键Ctrl+Shift+A
Dim ws As Worksheet
Dim r As Long
Dim src As String
Dim space_pos As String
Dim type_widget As String
Dim name_widget As String
Dim flag1_pos As Long
Dim flag1 As String
Dim flag2 As String
Dim flag_access_address As String
Dim c_dst As Long
flag1 = "_"
flag2 = "/"
' 防问权限标志所在单元格的地址
flag_access_address = "k1"
'生成定义语句的列
c_dst = 12
Set ws = ThisWorkbook.Sheets(1)
With ws
.Activate
For r = 1 To 5000
src = .Cells(r, 1) & _
.Cells(r, 2) & _
.Cells(r, 3) & _
.Cells(r, 4) & _
.Cells(r, 5) & _
.Cells(r, 6) & _
.Cells(r, 7) & _
.Cells(r, 8) & _
.Cells(r, 9) & _
.Cells(r, 10)
src = Trim(src)
If src <> "" Then
.Cells(r, 1).Select
If Left(src, 1) = "<" And Mid(src, 2, 1) <> "/" Then
'以字符"<" 开始,排除"</"开始,提取widget类型
type_widget = Right(src, Len(src) - 1)
space_pos = InStr(1, type_widget, " ")
If space_pos > 0 Then
'忽略掉" "后面的,
'如"<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android""
'把后面的" xmlns:android="http://schemas.android.com/apk/res/android""忽略掉
type_widget = Left(type_widget, space_pos)
End If
End If
If InStr(1, src, "+id/") > 0 Then
' 只提取定义过id的widget
name_widget = ""
flag1_pos = InStrRev(src, flag1)
If flag1_pos > 0 Then
' 出于简化目的,如果定义中有"_"字符作为分隔符,
' 只提取最后一个"_"后面的字符做widget的变量名
name_widget = Right(src, Len(src) - flag1_pos)
Else
' 如果没有"_"字符,
' 那么提取最后一个"/"后面的字符做widget的变量名
name_widget = Right(src, Len(src) - InStrRev(src, flag2))
End If
' 删除变量名中残留的双引号
name_widget = Replace(name_widget, """", "")
' 在c_dst指定的列生成定义语句
.Cells(r, c_dst) = .Range(flag_access_address) + " " + type_widget + " " + name_widget + " = null;"
End If
End If
Next
End With
End Sub
难看的VB风格,但真心很方便,怎么用呢,新建一个EXCEL打开,打开宏编辑器(我的是Excel2003版,07、10的操作可能不同)。
在VBA编辑器的左侧项目管理窗口中右键点击插入一个模块:
把上述VBA粘贴进代码窗口,保存关闭VBA编辑器:
这时这个Excel文件就包含一段宏代码,把布局代码粘贴到Sheet1表的A1单元格:
K1单元格输入访问权限,从工具菜单打开宏窗口:
选择我们写的宏执行:
如图所示在L列就生成控件的定义代码,复制回我们的Java编辑器就可以了:
它只会把定义过id的控件找出来,没有id的控件一般不需要在Java代码中操作的,宏窗口中有个"选项",进去后可以定义一个快捷组合键,如果执行不了宏的把宏安全性调低点试试。
对Excel不熟悉的童鞋们可移步这里下载(http://download.csdn.net/detail/z13759561330/9231011),我已经定义了Ctrl+Shift+A快捷键,如果好用别忘给个好评,谢谢!