借助VBA语言来分析布局代码,自动生成Android控件的定义代码

    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快捷键,如果好用别忘给个好评,谢谢!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一.该类的作用: 该类可以帮大家自动布局界面控件,不需要开发人员每个控件的设置属性,只需要调用方法,自动会设置该控件布局,并且控件的宽度随着窗体的变化而变化,该方法调用很简单 二.原理:使用TableLayOutPanle的功能,然后设定里面每个控件的样式 三.使用方法: 1)首先在录入数据的地方用GroupBox或者Panle作为容器(目前里面配置了这2中数据信息用户可以在ParentControlHeader类中进行相应配置) 2)然后在该容器中加入TableLayOutPanle控件,并设定行和列(例如:设定6列,奇数列的宽度都是绝对值:例如100px ,偶数列的宽度都设定为33%) 3)大家可以把相应的控件放入到TableLayOutPanle的相应单元格子中,(奇数列是标题列,偶数列是输入列) 4)在Load事件中这样调用就OK了 TableFormat tf = new TableFormat(tableLayoutPanel1); //此方法可以适用于父级控件是GroupBox或者Panel,您也可一修改 ParentControlHeader类中的配置文件,加入新的值,或者是修改已经设定的值 tf.SetTableFormat(true, PControlType.GroupControl); 这样,大家不需要设定每个TableLayout控件中的子控件的任何属性,TableFormat类帮自动布局界面上的控件,并且随着窗体的变化,控件是自动变化的,当然里面有些参数,是可以设定父级控件(GroupPanle/Panle的高度=里面行高(自动计算)+用户配置高度(目前配置了GroupBox和Panle) 详细可见Demo,代码注释写的比较详细,大家可以参考下. 谢谢..^_^.. (鼓励0资源分上传)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值