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

时间:2010-01-08 18:20:44

标签: java android

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

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

4 个答案:

答案 0 :(得分:53)

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

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

  1. 在res / values / attrs.xml文件中创建自定义属性(如果文件不存在,则创建该文件):
  2. <?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. 在您的布局文件中,添加自定义组件和指向资源的链接。

    3.  <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>
      

答案 1 :(得分:8)

出于任何其他目的,可以使用attrs构造函数参数检索在XML文件中声明自定义属性。

在我的情况下,我重用了首选项自定义对话框,并设置了类似的东西:

<?xml version="1.0" encoding="utf-8"?>
<!-- something here -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <your.package.projectname.CustomView
        foo="bar"
    />
</PreferenceScreen>

然后在我的班级构造函数中:

public CustomView(Context context, AttributeSet attrs) {
    String bar = attrs.getAttributeValue(null, "foo");
    Log.d("CustomView", "foo=" + bar);
}

答案 2 :(得分:3)

您可以为扩展View或子类的类创建自定义属性。该过程记录在Android Dev Guide的“创建视图类”部分的“定义自定义属性”标题下:

https://developer.android.com/training/custom-views/create-view#customattr

答案 3 :(得分:0)

android:keyLabel是键盘上每个键的Keyboard.Key类使用的众多XML属性之一。 android:keyLabel是你想用键标记的键(如上面的“w”)。属性是为类预定义的。 “w”不是android:keyLabel。如果你可以创建android:alternativeKeyLabel你期望这个类用它做什么?我想也许你应该尝试进一步解释你想要完成的事情。