如何在Android上创build我的自定义属性?

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

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

Solutions Collecting From Web of "如何在Android上创build我的自定义属性?"

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

考虑到你有一个从KeyboardView / Viewinheritance的CustomKeyboard:

  1. 在res / values / attrs.xml文件中创build自定义属性(如果该文件不存在,则创build该文件):
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="custom_keyboard"> <attr name="alternative_key_label" format="string" /> </declare-styleable> </resources> 
  1. 在您的自定义组件中创build一个构造函数,覆盖默认的构造函数,该构造函数接收属性集,因为在布局加载时会调用该构造函数。

     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> 

出于任何其他目的,可以使用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); } 

您可以为扩展View或子类的自己的类创build自定义属性。 该过程在“Android开发人员指南”的“可用资源types”部分的“自定义布局资源”标题下进行了说明:

https://developer.android.com/guide/topics/resources/available-resources.html#customresources

API演示中有一个名为LabelView的示例:

https://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html

https://developer.android.com/resources/samples/ApiDemos/res/values/attrs.html

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