让写代码变成简单的copy操作,代码生成器之一---------android,findViewById

通过写一个简单的配置文件,自动扩展生成相应的代码,从而可以偷点小懒。

配置文件如下:

TextView:money
TextView:name
TextView:age
ImageView:headImg

ruby 代码生成器如下:

require 'erb'
class FindViewById
	class << self
		def get_type_ab(type)
			case type
			when "TextView"
				"Tv"
			when "ImageView"
				"Iv"
			when "GridView"
				"Gv"
			when "ListView"
				"Lv"
			when "Gallery"
				"Gv"
			end
		end

		def get_attrs_from(conf_file)
			File.open(conf_file) do |f|
				result = []
				f.each_line do |line|
					line = line.chomp
					line = line.gsub(/\s+/,"")
					type_name = line.split(":")
					next if type_name.size != 2

					name = nil
					name = "m" << type_name[1].capitalize
					ab = get_type_ab(type_name[0])
					name << ab if ab != nil

					attr = Attr.new(type_name[0], name)
					attr.id = type_name[1]
					result << attr
				end
				result
			end
		end

		def out(conf_file)
			erb = ERB.new(template(conf_file))
			str = erb.result(binding)
		end

		def template(conf_file)
			template = %{
				<% attrs = FindViewById.get_attrs_from(conf_file) %>
				<% attrs.each do |attr| %>
					private <%= attr.type %> <%= attr.name %>;
				<% end %>

				private void initViews() {
					<% attrs.each do |attr| %>
						<%= attr.name %> = (<%= attr.type %>)findViewById(R.id.<%= attr.id %>);
					<% end %>
				}

				<% attrs.each do |attr| %>
					<<%= attr.type %> android:layout_width="wrap_content" android_layout_height="wrap_content" android:id="@+id/<%= attr.id %>" />
				<% end %>
			}
		end
	end

	class Attr
		def initialize(type,name)
			@type,@name = type,name
		end
		def id=(id)
			@id = id
		end
		attr_accessor :type, :name,:id
	end
end

#---------------------------------------run code----------------------------
conf_file = "test.conf"
conf_file = ARGV[0] if ARGV.size > 0
generate_code = FindViewById.out(conf_file)
puts generate_code

生成的代码如下:

private TextView mMoneyTv;

private TextView mNameTv;

private TextView mAgeTv;

private ImageView mHeadimgIv;

private void initViews() {

	mMoneyTv = (TextView)findViewById(R.id.money);

	mNameTv = (TextView)findViewById(R.id.name);

	mAgeTv = (TextView)findViewById(R.id.age);

	mHeadimgIv = (ImageView)findViewById(R.id.headImg);

}

<TextView android:layout_width="wrap_content" android_layout_height="wrap_content" android:id="@+id/money" />

<TextView android:layout_width="wrap_content" android_layout_height="wrap_content" android:id="@+id/name" />

<TextView android:layout_width="wrap_content" android_layout_height="wrap_content" android:id="@+id/age" />

<ImageView android:layout_width="wrap_content" android_layout_height="wrap_content" android:id="@+id/headImg" />

将这些代码copy到指定地方即可,简单吧?

时间: 2024-08-22 17:44:48

让写代码变成简单的copy操作,代码生成器之一---------android,findViewById的相关文章

小程序开发工具教程汇总,亲测无需代码,简单操作,可二次开发!

制作小程序要简单点,开发的方式简单点.所以!不得不扒一扒这款开发工具某即速应用,无需代码,简单操作,还可套用模板快速生成小程序代码包,支持二次开发.当然市面上还有很多款小程序编辑器,但大部分还是那种开发接单的,水太深了,交不起学费,还是自己来琢磨吧!大家有什么好的小程序工具类可以分享给我! 以下将我网上参与学习培训总结的一些资料文档分享出来,供大家参考学习.特别是不懂代码的朋友,这款开发工具还是可以试试的!容易上手! 当然首先,我们还是要先下载:最新版的微信开发者工具(方便进入代码二次编辑) 接

调试,高级--step into my code ,只调试自己写的代码,shux,各种step操作debug

调试,高级--step into my code ,只调试自己写的代码,shux,各种step操作debug debug调试IDEA step into mycode fram drop 可以扔掉栈帧,从新开始,但是有全局变量观察变化必须重头开始 step out 结束当前方法的调试调到这个方法所在代码行的下一行 step in /force in 可以调试源代码 step over 如果代码片段有方法,跳过方法的执行过程,也就是不调试方法的执行过程 step over 和 step in 联合

vs的一些操作技巧:在写代码时自动换行的设置

有时在写代码的时候,一行代码太长了,想换行,直接按回车键的话又会报错,怎么办?其实可以这样设置vs,就可以达到自动换行的效果啦. ? 原文地址:https://www.cnblogs.com/Teacher-Lu/p/11673048.html

关爱码农成长:关于写代码二三事

工作这么多年以来,一直从事软件相关领域,即使担任主管职务,也一直对技术充满热情.写代码写了这么多年,多少有些体会.我把自己对写代码这份工作的心得写下来,希望能给从事相关领域或有志于写代码的人参考. 一.你适合当程序员吗? 程序员,也叫软件工程师.程序设计师,我觉得「程序员」三个字简洁有力,是一种身份的象征. 如果你正从事这份工作,恭喜你!这是个热门行业,在可预见的将来,也不会消失.不过也别高兴太早,这一行的技术汰旧换新非常快,必须不断努力学习才行. 一点天赋 打开一个空白文档,必须创造出代码.与

【转载】-如何写代码-编程智慧

原文地址:http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的"智慧",并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋.然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获. 反复推敲代码 既然"天才是百分

转载-如何写代码-编程智慧

http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy/编程的智慧 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋.然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获. 反复推敲代码 既然“天才是百分之一的灵感,百分之

啊啊啊啊啊啊啊今天就写,炒鸡简单 数据库Sqlite的创建,库的增删改查

啦啦啦啦啦啦啦 写这个不用多长时间,我直接写代码注释都是些语句,Sql语句和Api来操作数据库 ,语句的参数我会注释 SQLite数据库创建数据库需要使用的api:SQLiteOpenHelper必须定义一个构造方法: //arg1:数据库文件的名字 //arg2:游标工厂 //arg3:数据库版本 public MyOpenHelper(Context context, String name, CursorFactory factory, int version){ }//数据库被创建时会调

写代码怎能不会这些Linux命令?

转自:https://zhuanlan.zhihu.com/p/28674639?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 写代码怎能不会这些Linux命令? 王爵nice 3 天前 这篇文章翻译自http://www.thegeekstuff.com/2010/11/50-linux-commands/这些都是一些很常用的命令,这篇文章中每个命令都有一些简单的示例说明它的用法,对于想学习Unix/Linux的人

JS代码的简单重构与优化

JS代码的简单重构与优化(适合新手) 原文  http://www.cnblogs.com/similar/p/5016424.html Demo . 1 //bad if (age > 20) { return true; } else { return false; } //good return age > 20; 这种一看就明白吧,没什么说的. Demo . 2 //bad for (var i = 0; i < arr.length; i++) { //do something