【问题标题】:Replace only one XML attribute with Structural Replace使用结构替换仅替换一个 XML 属性
【发布时间】:2018-11-30 12:13:53
【问题描述】:

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

所以我尝试使用带有搜索模板的结构替换:

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

和替换模板:

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

搜索工作正常,但替换会清除 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标签?

【问题讨论】:

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


    【解决方案1】:

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

    使用以下作为搜索模板:

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

    以下作为替换模板:

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

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

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

    主要问题是属性的顺序没有被保留:fontFamily 将成为第一个。这也可以解决,但这是一个不同的技巧。

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 2014-07-27
      • 2012-11-15
      • 2021-07-30
      • 2021-11-09
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多