在整个项目中通过butterknife注释替换findviewbyid的便捷方式?

时间:2015-12-12 13:28:57

标签: android android-studio

有没有办法可以自动替换Butterknife @Inject(id)注释的所有findviewbyid公式,或者我必须手动完成?我使用Android Studio IDE

2 个答案:

答案 0 :(得分:3)

我编写了一些正则表达式来处理搜索和替换任务。但是,这可能不值得,取决于你有多少陈述。

我使用SublimeText来运行查询,它支持我需要的换行符。 IntelliJ没有匹配我尝试的查询中的换行符。我认为sed也可以使用(查看sed手册以获得'高级'开关或其他东西)。

字符串的搜索模式:

private (String) (\w+);((?:.|\n)*)\1 = \w*.getString\(R.string.(\w*)\);

替换字符串模式:

@BindString(R.string.$4)\n    $1 $2;$3

查看ID的搜索模式

(?:private |public |protected |)(\w*) (\w+)(?:\s*=\s*null|);((?:.|\n)*)\s\2 = .*findViewById\(R.id.(\w*)\);

在上面我添加了搜索用其他修饰符声明的字段。

替换视图ID的模式

@Bind(R.id.$4)\n    $1 $2;$3

您可能希望用\ s *替换空格,但这会使表达式更难以阅读,所以我没有在每个位置都这样做。

它的作用示例

private View map_center;
someMethod() {
    ...
    map_center = activityOrView.findViewById(R.id.centerview);
    ...
}

成为

@Bind(R.id.centerview)
View map_center;
someMethod() {
    ...
    ...
}

正则表达式使用后引用\1来定位字段的赋值。如果该字段不存在但是是局部变量,则它将使用@Bind包装局部变量,并且您必须手动将其作为字段。它不会将局部变量与声明放在同一行中作为赋值匹配。

答案 1 :(得分:0)

根据this tutorial,我应该说是的!:

  

The Butter Knife图书馆,由Jake Wharton开发并维护   (Square Inc.),有注释,可以帮助开发人员实例化   来自我们的活动或片段的观点。它还有注释要处理   onLongClick()findViewById()等事件

     

在每个活动或片段中,您必须删除或注释掉,   每次调用@InjectView方法并添加@InjectView(R.id.sample_textview) TextView sample_textview;   声明变量前的注释,表示   视图的标识符。

<div class="btn-group" dropdown>
  <button type="button" class="btn btn-info">test</button>
  <button type="button" class="btn btn-info dropdown-toggle">
    <span class="caret"></span>
    <span class="sr-only">Split button!</span>
  </button>

  <ul class="dropdown-menu" role="menu">
    <li><a href="#">Action</a>
    </li>
    <li><a href="#">Another action</a>
    </li>
    <li><a href="#">Something else here</a>
    </li>
    <li class="divider"></li>
    <li><a href="#">Separated link</a>
    </li>
  </ul>
</div>