codecamp

重构Android XML布局文件

重构Android XML布局文件

除了常见的重构外,IntelliJ IDEA 还为 Android 布局定义 XML 文件提供了许多特定于 Android 的重构。其中,大部分的这些重构都可以在以下两种设计模式下使用:

  • 手动模式,位于目标布局定义文件打开的“编辑器”选项卡中,以及从“结构(Structure)”工具窗口中。
  • 在Android UI Designer中,从“设计(Design)”窗格或“组件树(Component Tree)”中。

您可以通过在打开布局定义文件的编辑器中切换“设计(Design)”和“文本(Text)”选项卡,以便在这两种模式之间进行切换。

Android XML布局文件

提取样式重构

Android 样式有助于将应用程序设计与应用程序功能分开,就像“层叠样式表(CSS)”一样。

通过“提取样式(extract style)”重构,您可以从布局 XML 标签创建样式。IntelliJ IDEA 在 /res/values/styles.xml 文件中创建样式声明,并将标签属性转换为在 item 元素中声明的样式属性。好处是,现在不再需要分析整个资源定义文件来更新标记属性来编辑布局。所有你需要做的就是更新样式定义,然后在引用样式的任何位置都将自动应用更改。 

应用提取样式重构的操作如下:

  1. 执行以下操作之一:
    • 在可视模式下,在“设计(Design)”窗格或“组件树(Component Tree)”的画布上的定义中选择使用源 XML 标记的组件。
    • 在手动模式下,将光标放置在源 XML 标记内的任何位置。
  2. 从主菜单中选择:Refactor | 重构此项(Refactor | Refactor This)或按 Ctrl+Shift+Alt+T。在出现的弹出窗口中,从 Extract 组中选择 Style。或者,在选择的上下文菜单上选择:Refactor | 提取| 提取样式(Refactor | Extract | Extract Style)。
  3. 在打开的“提取Android样式”对话框中,指定要创建的样式的名称,并选择要作为样式属性包含的标签属性。
  4. 要使 IntelliJ IDEA 通过将标签属性替换为对新创建的样式的引用来自动更新布局定义,请选中“在提取样式后启用'尽可能使用样式'重构(Launch 'Use Style Where Possible' refactoring after the style is extracted)”复选框。

内联样式重构

此重构与“提取样式(Extract Style)”重构相反,并导致将样式中定义的所有属性添加到应用此样式的一个或所有组件。当您需要将父样式与其继承者合并时,也会使用此重构。

您可以从样式定义或应用样式的组件调用“内联样式(Inline Style)”重构。在第一种情况下,IntelliJ IDEA 删除样式定义,并将相应的属性添加到使用它的所有组件。从组件调用重构时,可以将其应用于具有此样式的所有组件,也可以仅应用于当前组件。

如果需要使用内联样式重构,请执行以下操作之一:

  • 从样式定义中调用重构:
    1. 打开样式定义文件,将光标定位到要内联样式的名称,然后从上下文菜单选择:Refactor | 内联(Refactor | Inline)或按 Ctrl+Alt+N。
    2. 打开的 Inline Android 样式对话框只提供一个默认选择的选项(内联所有引用和删除样式)。因此,IntelliJ IDEA 将样式属性转换为 XML 标签,将它们添加到使用样式的所有组件的定义中,并删除样式定义。
      • 要立即应用更改,请单击“重构(Refactor)”。
      • 要在应用之前打开查找工具窗口并预览更改,请单击“预览(Preview)”。
  • 从组件定义中调用重构:
    1. 选择一个有问题样式的组件:
      • 在可视模式下,在“设计(Design)”窗格或“组件树(Component Tree)”中选择具有此样式的组件。然后从主菜单或从选择的上下文菜单中选择选择:Refactor | 内联样式(Refactor | Inline Style)。
      • 在手动模式下,在“结构(Structure)”视图中选择具有此样式的组件,然后从主菜单或从选择的上下文菜单中选择:Refactor | 内联样式(Refactor | Inline Style )。
    2. 在打开的 Inline Android Style 对话框中,配置重构:
      • 要让 IntelliJ IDEA 将样式的属性转换为 XML 标签,将它们添加到使用样式的所有组件的定义中,并删除样式定义,请选择“内联所有引用并删除样式(Inline all references and remove the style)”。
      • 要仅将重构应用于当前组件,请选择“内联此用法并保留样式(Inline this usage and keep the style)”。
    3. 指定您想要如何应用更改。
      • 要立即应用更改,请单击“重构(Refactor)”。
      • 要在应用之前打开查找工具窗口并预览更改,请单击“预览(Preview)”。

提取布局

IntelliJ IDEA 支持重新使用 Android 布局:IntelliJ IDEA 将现有布局定义的一部分移至单独的布局定义文件,并通过自动插入的 <include/> 标记在原始布局定义中引用它。在 IntelliJ IDEA 中,此操作称为“提取布局重构(extract layout refactoring)”。

提取布局

IntelliJ IDEA 提取布局重构的操作如下所示:

  1. 选择要作为单独布局提取的片段。执行以下操作之一:
    • 在手动模式下,选择要提取的代码片段或将光标定位到片段的根元素中。
    • 在可视模式下,选择要在设计中提取的组件或一组组件。窗格中或组件树中。
  2. 从主菜单中选择:Refactor | 重构此项(Refactor | Refactor This)或按 Ctrl+Shift+Alt+T。在出现的弹出列表中,从“提取(Extract)”组中选择“布局(Layout)”。或者,从选择的上下文菜单中选择:Refactor | 提取| 提取布局(Refactor | Extract | Extract Layout)。
  3. 在打开的“提取Android布局(Extract Android Layout)”对话框中,指定将存储提取的布局定义的文件的名称以及其父文件夹的名称。您不需要预先创建文件和文件夹,IntelliJ IDEA 会自动创建它们。
  4. 为布局创建配置限定符列表。此列表确定了必须提供的一组替代资源,以便在特定目标设备配置中运行应用程序。
    • 要向该集添加限定符,请在“可用限定符”列表中选择它,单击该按钮,然后指定限定符的值。
    • 要从集合中删除限定符,请在选择限定符列表中选择它,并单击按钮。

    有关限定符的详细信息、它们的含义、可接受的值和格式的详细信息,请参阅替代资源的配置限定符规范。

内联布局重构

此重构与“提取布局(Extract Layout)”重构相反,并导致嵌入通过<include/>标记引用的布局并删除标记。

从布局定义文件中的 <include/> 标签调用该内嵌布局( Inline Layout)重构。您可以让 IntelliJ IDEA 将其应用于所有引用并删除布局定义文件,或仅删除当前引用。 

内联布局重构的操作如下所示:

  1. 打开引用有关布局的 XML 定义文件。
  2. 导航到引用相关布局的 <include/> 标签,并将光标放置在布局名称处。
  3. 执行以下操作之一:
    • 从主菜单选择:重构| 内联(Refactor | Inline)。
    • 从主菜单选择:重构| 重构此项(Refactor | Refactor This),然后在打开弹出列表中选择“内联(Inline)”。
    • 按 Ctrl+Alt+N。
    • 从上下文菜单中选择:重构| 内联(Refactor | Inline)。
  4. 在打开的 Inline Android Layout 对话框中,配置重构:
    • 要使 IntelliJ IDEA 将布局嵌入到通过 <include/> 标签引用的所有文件中,并删除引用的布局定义文件,请选择“内联所有引用并删除文件(Inline all references and remove the file)”。
    • 要将重构应用于当前引用,请选择“内联此用法并保留该文件(Inline this usage and keep the file)”。
  5. 指定您想要应用更改的方式:
    • 要立即应用更改,请单击“重构(Refactor)”。
    • 要在应用之前打开查找工具窗口并预览更改,请单击“预览(Preview)”。
IntelliJ IDEA预览布局定义文件的输出
创建Android运行/调试配置
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

IntelliJ IDEA的一般准则

什么是IntelliJ IDEA项目

使用IntelliJ IDEA的意图行为

IntelliJ IDEA使用运行/调试配置

特定于VCS的程序

IntelliJ IDEA语言和特定框架指南

IntelliJ IDEA的数据库和SQL功能

IntelliJ IDEA使用之JavaServer Faces(JSF)

IntelliJ IDEA:分析PHP应用程序的性能

IntelliJ IDEA:调试PHP应用程序

IntelliJ IDEA:适用于PHP的Google App Engine

IntelliJ IDEA更多内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }