Как я могу создать свои пользовательские свойства в xml для Android?
В нашем проекте есть клавиатура с элементами "Key", эти ключевые элементы имеют такие атрибуты, как android: codes = "119", android: keyLabel = "w" и т.д.
Мой вопрос заключается в том, как добавить пользовательский атрибут, например, "android: alternativeKeyLabel", чтобы сделать что-то еще.
Ответы
Ответ 1
Эта ссылка дает поверхностное объяснение:
http://developer.android.com/guide/topics/ui/custom-components.html
Учитывая, что у вас есть CustomKeyboard, который наследуется от KeyboardView/View:
- Создайте свои пользовательские свойства в файле 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>
-
Создайте конструктор в своем настраиваемом компоненте, переопределяющем конструктор по умолчанию, который получает набор атрибутов, потому что этот будет вызываться при загрузке макета.
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();
}
-
В вашем файле макета добавьте свой собственный компонент и ссылку на свои ресурсы.
<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>
Ответ 2
Для любых других целей объявление пользовательского свойства в файле XML может быть получено с помощью параметра конструктора attrs.
В моем случае я повторно использую пользовательский диалог предпочтений и задаю такие вещи:
<?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>
Тогда в моем классе contructor:
public CustomView(Context context, AttributeSet attrs) {
String bar = attrs.getAttributeValue(null, "foo");
Log.d("CustomView", "foo=" + bar);
}
Ответ 3
Вы можете создавать собственные атрибуты для собственных классов, которые расширяют представление или подкласс. Процесс задокументирован в разделе "Доступные типы ресурсов" в руководстве Android Dev Guide под заголовком "Ресурсы пользовательских макетов":
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
Ответ 4
android: keyLabel - один из многих атрибутов XML, используемых классом Keyboard.Key для каждого ключа на вашей клавиатуре. android: keyLabel - это то, что вы хотите пометить ключ (например, "w", как указано выше). Атрибуты предварительно определены для класса. "W" - это не андроид: keyLabel. Если бы вы могли создать android: alternativeKeyLabel, что бы вы ожидали от этого класса? Я думаю, возможно, вам стоит попытаться объяснить, что вы пытаетесь сделать.