加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl自动生成Android Activity的Java文件

发布时间:2020-12-15 23:49:57 所属栏目:大数据 来源:网络整理
导读:? ? ? ? 开发 Android 时,每添加一个 Activity ,都需要新建一个 Layout 文件和一个 Java 文件,还不能忘记在 Manifest 中注册,然后在 Java 文件中使用 findViewById 找到控件,才能开始写逻辑代码,如果是按钮,需要添加 OnClickListener 。 ? ? ? ? 于是

? ? ? ? 开发Android时,每添加一个Activity,都需要新建一个Layout文件和一个Java文件,还不能忘记在Manifest中注册,然后在Java文件中使用findViewById找到控件,才能开始写逻辑代码,如果是按钮,需要添加OnClickListener

? ? ? ? 于是写了一个简单的perl脚本,根据Layout文件,生成对应的Java文件,代码如下,读者可以修改实现更加完善的功能:

# 
# 根据布局文件生成XXActivity.java
# 自动将所有带@+id的控件初始化
#

$activity_ext = "Activity";
$file_ext = ".java";
$template_filename = "activity_template.java";

#Activity名称
print "输入Activity名称:";
$activity_name = <STDIN>;
print "输入package名称:";
$package_name = <STDIN>;
print "输入布局文件名称:";
$layout_name = <STDIN>;
$layout_filename = $layout_name.".xml";

#打开文件
$filename = $activity_name.$activity_ext.$file_ext;
open(FILE,">",$filename) or die "open file $filename failed,$!n";

#存储输出字符串的信息
my $template_content;

open (TEMPLATE,"<",$template_filename ) or die "open file $template_filename failed,$!n";
{
    local $/=undef;
    $template_content = <TEMPLATE>;
    close TEMPLATE;
}

#读取layout文件,识别出@+id的控件名称
my @control_name_arr;
my $layout_content;
open (LAYOUT,$layout_filename ) or die "open file $layout_filename failed,$!n";
{
    local $/=undef;
    $layout_content = <LAYOUT>;
    close LAYOUT;
}

#匹配控件类型和id
my (@control_type_arr,@name_id_arr);
while( $layout_content =~ /<(w+)s+android:id="@+id/(w+)"/isg )
{
    #print $2,"n";
    if($1 ne "include"){
        push @control_type_arr,$1;
        push @name_id_arr,$2;
    }
}

#点击按钮的字符串
$click_string = '.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //TODO 按钮点击处理
                
            }
        });';

#初始化控件
my $control_init_string;
my $control_define_string;
for($i=0;$i<@control_type_arr;$i++){
    $control_define_string .= (" " x 4).$control_type_arr[$i]." ".$name_id_arr[$i].";n";
    $control_init_string .= (" " x 8).$name_id_arr[$i]." = (".$control_type_arr[$i].") findViewById(R.id.".$name_id_arr[$i].");n";
    if($control_type_arr[$i] eq "Spinner"){
        $control_init_string .= (" " x 8).$name_id_arr[$i].$click_string."n";
    }
}
#image = (ImageView) findViewById(R.id.image);

$template_content =~ s/#PACKAGE_NAME#/$package_name/;
$template_content =~ s/#ACTIVITY_NAME#/$activity_name$activity_ext/;
$template_content =~ s/#LAYOUT_NAME#/$layout_name/;
$template_content =~ s/#DEFINE_AREA#/$control_define_string/;
$template_content =~ s/#INIT_AREA#/$control_init_string/;

print FILE $template_content;
print "n--------- 成功生成$filename -----------nn";

close TEMPLATE;
close LAYOUT;
close FILE;


activity_template.java文件内容

package #PACKAGE_NAME#;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;

public class #ACTIVITY_NAME# extends Activity {

#DEFINE_AREA#
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.#LAYOUT_NAME#);
        
        initView();
	}

	private void initView() {
#INIT_AREA#
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读