在Android Studio中更改布局后需要清理项目

13

当我在XML布局文件中更改像TextInputEditTextmaxLength这样的小细节时,我需要清理项目以使AS捡起更改。

res文件夹的结构如下:

res
- layout
- drawables
- ...

没有更多的子文件夹。 AS 3.1.1,Gradle 4.6。 我尝试在gradle中添加以下内容:

sourceSets {
    main.res.srcDirs =  [
                         'src/main/res/anim',
                         'src/main/res/color',
                         'src/main/res/drawable',
                         'src/main/res/drawable-hdpi',
                         'src/main/res/drawable-mdpi',
                         'src/main/res/drawable-xhdpi',
                         'src/main/res/drawable-xxhdpi',
                         'src/main/res/drawable-xxxhdpi',
                         'src/main/res/menu',
                         'src/main/res/mipmap-dpi',
                         'src/main/res/mipmap-hdpi',
                         'src/main/res/mipmap-mdpi',
                         'src/main/res/mipmap-xhdpi',
                         'src/main/res/mipmap-xxhdpi',
                         'src/main/res/mipmap-xxxhdpi',
                         'src/main/res/raw',
                         'src/main/res/values',
                         'src/main/res/values-land',
                         'src/main/res/values-large',
                         'src/main/res/values-v21',
                         'src/main/res/valuesw820dp',
                         'src/main/res/xml',
                         'src/main/res/layout',
                         'src/main/res']
}

输入图像描述

有没有办法避免更改生效时每次都清理项目?

因此,每当我更改XML文件并运行应用程序时,应该看到我的更改,但每次都必须清理项目,这很烦人。


你启用了节能模式吗? - Sagar
@Sagar 它没有改变任何东西。 - Tomasz Kryński
6个回答

6
首先,您需要在res文件夹旁边创建您的额外资源文件夹,而不是在其中创建文件夹。然后尝试制作类似于此示例的XML文件:
sourceSets{
     main  {
         manifest.srcFile 'src/main/AndroidManifest.xml'
         java.srcDirs = ['src/main/java', '.apt_generated']
         aidl.srcDirs = ['src/main/aidl', '.apt_generated']
         res.srcDirs = [
            'src/main/res',
            'src/main/test',
            'src/main/login',
            'src/main/main',
            'src/main/includes'
        ]
    }
}

注意: 添加的资源文件夹在不清理项目的情况下将会生效。


在其他项目中,当我将布局放置在res文件夹下时,它可以正常工作,因此我期望会是同样的情况。 - Tomasz Kryński
你可以创建一个新的项目或修改现有的项目。 - user1773603
当然可以,我希望gradle能够捕捉到我在默认的Android项目文件夹“res/layout”中所做的更改。它没有这样做,你告诉我需要将“layout”移出“res”文件夹才能使其正常工作,因此我告诉你,在虚拟项目中,它可以作为“res/layout”工作,而不会破坏默认的文件夹结构。 - Tomasz Kryński
它在Android Studio 3.2中也无法工作,在项目结构中,我该如何解决这个问题? - Prince Dholakiya

3

问题出在构建变体上。其中一个被命名为main,这会导致项目扫描出现问题。更改名称即可解决此问题。在较新版本的Gradle插件中进行了标记。


对我来说,甚至发生在包含单词“main”的文件名上。 - J7bits

1
我认为你不需要每次都清理项目。对于一些小的更改,甚至不需要再次运行应用程序,只需点击即时运行即可,因为它会将更改直接热替换到当前活动中。
另外,你添加 gradle 的路径有特殊原因吗? 据我所知,只有在更改路径并将其设置为其他内容时才需要这样做。在你的情况下,路径位于默认位置,所以我看不出这样做的原因。尝试从 gradle 中删除这个并开启即时运行。
这些链接应该会有帮助:

https://developer.android.com/studio/run/#instant-run https://developer.android.com/studio/write/add-resources


问题是,假设我更改了TextInputEditText的maxLength,然后点击“运行”,期望在手机上看到更改,但实际上没有。我需要清理项目并重新运行应用程序。 - Tomasz Kryński
我刚刚尝试了gradle中默认路径目录作为解决方案之一,但它没有起作用。因此我已将其删除。虚拟项目运行良好,无需重新构建或清理即可更改布局。 - Tomasz Kryński
好的,这意味着问题出在这个特定的项目上。你尝试过在一个简单的模块中实现相同的操作,并在其中使用虚拟活动吗?如果没有问题,那么这是一个基于模块的问题,而不是基于项目的问题,但如果问题仍然存在,那么我们可以确定这是一个基于项目的问题。 - shiredude95
我在更改项目中的任何布局/资源时遇到了问题,它就是不会更新更改。只有重新构建或清除之后,.xml 中的任何更改才会被接受,这可以是删除文本字段、一个属性或字符串。我不知道您所说的“裸骨模块”是什么意思。 - Tomasz Kryński
你在运行配置中选择了GradleAwareMake吗?最近AS出现了一个导致这个问题的bug。这篇帖子讨论了这个问题:https://dev59.com/FKrka4cB1Zd3GeqPdW1n - shiredude95
显示剩余2条评论

0

在更改xml布局文件后,无需每次清理,只需单击预览部分右端的蓝色图标刷新布局即可,如下图所示。其中有一个名为Force Refresh Layout的属性。点击它,您的布局将被刷新。enter image description here


无论如何,这并没有帮助。在即时运行后,手机上的布局仍然没有改变。 - Tomasz Kryński

0
你可以尝试在Android Studio中启用即时运行功能。这对我很有效。
如果你使用的是MAC电脑,请前往“首选项”,搜索“即时运行”,并在右侧窗口中勾选“启用”选项。
启用后,你可以在RUN菜单中选择应用更改,而不是直接运行。

我已启用即时运行。当我使用即时运行时,它无法检测布局中的更改并且不执行任何操作。 - Tomasz Kryński

0

将Android Studio升级到3.1.3版本可以解决我的问题

下载最新版本3.1.3

或者你可以点击信息按钮,然后刷新布局来解决问题

enter image description here


我使用的是3.1.3版本。你刚才指出的按钮会显示一个带有“无问题”的新窗口。强制重新加载应用程序或者进行即时运行均不能抓取到布局的更改(例如我尝试从启动画面中移除图像,但好像没有生效)。 - Tomasz Kryński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接