bindView注释代码转成findByViewId脚本
在接手代码的时候一般回遇到有用butterknife来绑定控件的习惯,butterknife确实是个非常方便的控件,但是在实际使用的时候还是会存在一部分问题,彻底避免自然是改回原来的控件绑定方式,但是一个个打太过麻烦,我这里就写了个绑定脚本,直接放到Java代码里运行就行。
在线Java编译器:https://tool.lu/coderunner/
注意:
1、复制进去的化有绑定控件代码就行,其他非绑定控件代码会过滤掉。
2、在线Java运行编译器里直接不能复制,不然会出现String格式不符异常,可以用word文档处理(回车,前置空格即可);
例:@BindView(R2.id.middlegiftLayout)View mMiddleGiftLayout;@BindView(R2.id.middlegiftHead)ImageView mMiddleGiftHead;@BindView(R2.id.middleSendName)TextView mMiddleSendName;@BindView(R2.id.middleGetName)TextView mMiddleGetName;@BindView(R2.id.middleText)TextView mMiddleText;@BindView(R2.id.middleGiftName)TextView mMiddleGiftName;
3、可以直接在Android测试类里复制运行使用,复制到s对象里就行,里面会自动转换string未规范形式,然后测试运行打印出来的就是了。
java脚本
class Untitled {
public static void main(String[] args) {
String s="@BindView(R2.id.simple_room)\n" +
" RoundedImageView simple_room;\n" +
" @BindView(R2.id.viewpager)\n" +
" ViewPager mViewPager;\n" +
" BottomAdapter mAdapter;\n" +
"\n" +
" @BindView(R2.id.room_type)\n" +
" TextView room_type;\n" +
" @BindView(R2.id.room_name)\n" +
" TextView room_name;\n" +
" @BindView(R2.id.online_room)\n" +
" TextView online_room;\n" +
" @BindView(R2.id.exmine)\n" +
" ImageView exmine;\n" +
" @BindView(R2.id.collect)\n" +
" TextView mCollect;\n" +
" @BindView(R2.id.roomId)\n" +
" TextView mRoomId;";//需要转换的内容放这
s=s.replaceAll("\\n","");
s=s.replaceAll(" ","");
String[] t=s.split(";");
StringBuilder f= new StringBuilder();
for (String value : t) {
if (value.contains("R2.id.")) {
String id = value.replaceAll("@BindView\\(R2.id.", "").split("\\)")[0];
String name = value.split("\\)")[1].split(" ")[1];
f.append(name).append("=findViewById(R.id.").append(id).append(");\n");
}
}
System.out.println(f);
}
}
转换结果
升级版
可以放回类型,应对需要返回类型的情况。
class Untitled {
public static void main(String[] args) {
String s="@BindView(R2.id.queue_list2)\n" +
" RecyclerView queue_list2;\n" +
" @BindView(R2.id.typePrivate)\n" +
" RelativeLayout mPrivateLayout;\n" +
"\n" +
" @BindView(R2.id.queue_list)\n" +
" RecyclerView queue_list;\n" +
"\n" +
" @BindView(R2.id.equipment_linyout)\n" +
" LinearLayout equipment_linyout;\n" +
" @BindView(R2.id.send_linyout)\n" +
" LinearLayout send_linyout;\n" +
" @BindView(R2.id.rankLayout)\n" +
" View mRankLayout;\n" +
" @BindView(R2.id.go_back)\n" +
" ImageView go_back;\n" +
" @BindView(R2.id.edt_input_text)\n" +
" EditText edt_input_text;\n" +
"\n" +
" @BindView(R2.id.egg)\n" +
" ImageView mEgg;\n" +
" @BindView(R2.id.middle_gift)\n" +
" View MiddleGift;\n";//需要转换的内容放这
s=s.replaceAll("\\n","");
s=s.replaceAll(" ","");
String[] t=s.split(";");
StringBuilder f= new StringBuilder();
for (String value : t) {
if (value.contains("R2.id.")) {
String id = value.replaceAll("@BindView\\(R2.id.", "").split("\\)")[0];
String name = value.split("\\)")[1].split(" ")[1];
String type=value.split("\\)")[1].split(" ")[0];
f.append(name).append("=("+type+")findViewById(R.id.").append(id).append(");\n");
}
}
System.out.println(f);
}
}