首页 > 解决方案 > 在 Android Studio 上工作时自定义首选项没有自动完成功能?重构不适用于自定义视图属性

问题描述

此问题不会出现在常规布局 XML 文件中,但会出现在 PreferenceScreen xml 文件中。这是预期的行为吗?当我定义自定义视图并将其直接添加到 PreferenceScreen 时,它是 XML 文件,该自定义视图对其属性没有自动完成或重构功能。

为了澄清自定义首选项的含义:我使用此方法来实现自定义首选项。

因此,让我们看一下该链接中的示例。我想做的是拥有自动完成的所有好处(例如 IntelliSense)。假设我想创建一个我定义/创建的自定义 SeekBar,但不是手动键入包名和类名,而是按 CTRL+SPACE 来调出自动完成列表。但它没有出现!

假设我希望这是我最终的 PreferenceScreen xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <com.example.SeekbarPreference
        android:key="pref_volume"
        android:title="@string/volume" />
    
</PreferenceScreen>

我想 CTRL+SPACE 来自动完成我的自定义首选项:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <com.ex
    
</PreferenceScreen>

但它不起作用!它确实适用于由活动膨胀的普通布局文件下的自定义视图。但如果它是 PreferenceScreen,我必须全部输入,但我很容易出错。

此外,我想重构自定义首选项的属性引用的资源。假设我进入我的“strings.xml”资源文件并将“@string/volume”更改为“@string/volume_label”

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <com.example.SeekbarPreference
        android:key="pref_volume"
        android:title="@string/volume" />
    
</PreferenceScreen>

当我在“strings.xml”文件中时,如果我右键单击并将“volume”重构为“volume_label”,这些资源会在整个项目中重命名,包括布局 xml 文件和 java 类文件。但是,PreferenceScreen 文件中的“@string/volume”保持不变。当我编译和安装应用程序时,我从 Android Studio 收到一个错误,即名为“volume”的字符串资源不存在。

如果我在我的 PreferenceScreen 的 XML 文件中,如果我右键单击:android:title="@string/volume",则缺少重构 > 重命名按钮。

标签: androidandroid-studioautocompleterefactoring

解决方案


我解决了。

问题来自为自定义 Preference 类指定的访问修饰符。

如果您希望能够重构并为您的自定义首选项启用自动完成功能,Android Studio 仍然需要访问该类。

如果自动完成和重构不起作用,则如下所示:

class MySeekBarPreference extends SeekBarPreference {
    // Autocomplete and refactoring DISABLED in Android Studio
}

如果您希望自动完成和重构工作,它需要如下所示:

public class MySeekBarPreference extends SeekBarPreference {
    // Autocomplete and refactoring ENABLED in Android Studio
}

考虑到这些新信息,我认为最初的问题与它是 PreferenceScreen 还是常规的膨胀布局无关。我在常规布局中工作的其他自定义视图是公开的,但我在 PreferenceScreen 中的自定义首选项不公开。


推荐阅读