用结构替换仅替换一个XML属性

时间:2018-06-21 08:27:50

标签: xml android-studio intellij-idea structural-search

我想在所有TextView标签中用android:fontFamily="sans-serif-medium"替换属性android:fontFamily="@font/roboto_medium"

因此,我尝试将结构替换与搜索模板一起使用:

<TextView android:fontFamily="sans-serif-medium"/>

和替换模板:

<TextView android:fontFamily="@font/roboto_medium"/>

enter image description here

搜索工作正常,但是替换可以清除TextView标记中的所有其他属性:

<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:fontFamily="sans-serif-medium"
    android:layout_height="wrap_content" />

替换为

<TextView android:fontFamily="@font/roboto_medium"/>

如何修改替换模板以仅更改fontFamily标签?

1 个答案:

答案 0 :(得分:2)

目前,我只能建议在元变量中捕获所有额外的参数,然后在替换模板中重新使用它。

使用以下内容作为搜索模板:

<TextView android:fontFamily="sans-serif-medium" $attrs$/>

以下内容作为替换模板:

<TextView android:fontFamily="@font/roboto_medium" $attrs$/>

并单击“编辑变量”按钮,然后选择左侧的attr,并确保其最小计数为零,最大计数为无限(通过选中2018.1.4中的复选框来完成,通过完全删除EAP中的最大计数)。

如果要保留内部元素(几乎不适用于TextView),则可以使用相同的技巧。

主要问题是属性的顺序未保留:fontFamily将成为第一个。也可以解决,但这是另一种技巧。