android - 在 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",则缺少重构 > 重命名按钮。
解决方案
我解决了。
问题来自为自定义 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 中的自定义首选项不公开。
推荐阅读
- javascript - 嵌套的 v-for 循环和不正确的数据放置
- import - SAS 多重导入
- python - Python函数以偶数或奇数为条件
- c# - 在当前情况下,我将如何在“组织”类中编写搜索和删除方法
- windows - Git 子树 - 子树是最新的,但不能推送到 Windows
- python - 如何使用 python 通过 POST 请求将成员/用户添加到 Rancher Project?
- jenkins - Jenkins Pipeline 在阶段之间使用从一个作业到另一个作业的参数
- c# - Moq 验证 Times.Once 不使用 It.Is 特定参数
- jquery - Concave and convex shape div
- java - org.hibernate.PersistentObjectException:分离的实体传递给持久化,同时使用 hashMap 持久化对象