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# } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |