java - 如何在 Android 的 xml 上创建我的自定义属性?

标签 java android

我们的项目中有一个带有“Key”元素的键盘,这个Key元素有android:codes="119", android:keyLabel="w"等属性。

我的问题是如何包含一个自定义属性,如“android:alternativeKeyLabel”来做其他事情。

最佳答案

这个链接给出了一个肤浅的解释: http://developer.android.com/guide/topics/ui/custom-components.html

考虑到您有一个继承自 KeyboardView/View 的 CustomKeyboard:

  1. 在 res/values/attrs.xml 文件中创建您的自定义属性(如果文件不存在,则创建该文件):
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <declare-styleable name="custom_keyboard">
        <attr name="alternative_key_label" format="string" />
    </declare-styleable>

</resources>
  1. 在您的自定义组件中创建一个构造函数,覆盖接收属性集的默认构造函数,因为在加载布局时会调用这个构造函数。

    public CustomKeyboard(Context context, AttributeSet set) {
        super(context, set);
        TypedArray a = context.obtainStyledAttributes(set,R.styleable.custom_keyboard);
        CharSequence s = a.getString(R.styleable.custom_keyboard_alternative_key_label);
        if (s != null) {
            this.setAlternativeKeyLabel(s.toString());
        }
        a.recycle();
    }
    
  2. 在您的布局文件中,添加您的自定义组件和资源链接。

 <Layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/your.package.ProjectName"
    .../>
    ...
    <your.package.projectname.CustomKeyboard
        android:id="@+id/my_keyboard"
        ...
        app:alternative_key_label="F">
    </your.package.projectname.CustomKeyboard>
</Layout>

关于java - 如何在 Android 的 xml 上创建我的自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029719/

相关文章:

android - "Cannot resolve method ... "意外插入应用索引后

android - 将多个 XML 文件合并为一个文件效率更高吗?

android - Arraylist<hashmap<>> 值在 ListView 中重复

android - 如何在Android中增加相机的亮度

java - 在 Android 和 iOS 中使用的最佳服务器客户端通信协议(protocol)是什么?

java - SqlSessionFactory 必须使用 SpringManagedTransactionFactory 才能使用 Spring 事务同步

java - Itext 7 PdfException - "com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document."

java - 线程和进程之间的文件锁

java - 如何在 Java 中生成随机排列?

java - 在 Windows 上从 jenkins 发送电子邮件时必须首先发出 STARTTLS 命令