Как я могу создать свои собственные свойства на xml для Android? - PullRequest
28 голосов
/ 08 января 2010

В нашем проекте есть клавиатура с элементами «Key», у этих элементов Key есть такие атрибуты, как android: codes = "119", android: keyLabel = "w" и т. Д.

Мой вопрос заключается в том, как включить пользовательский атрибут, например «android: alternativeKeyLabel», чтобы сделать что-то еще.

Ответы [ 4 ]

53 голосов
/ 11 ноября 2011

Эта ссылка дает поверхностное объяснение: http://developer.android.com/guide/topics/ui/custom-components.html

Учитывая, что у вас есть CustomKeyboard, которая наследуется от KeyboardView / View:

  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>
8 голосов
/ 14 мая 2012

Для любых других целей объявление пользовательского свойства в файле 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>

Тогда в моем классе конструктор:

public CustomView(Context context, AttributeSet attrs) {
    String bar = attrs.getAttributeValue(null, "foo");
    Log.d("CustomView", "foo=" + bar);
}
3 голосов
/ 09 января 2010

Вы можете создавать собственные атрибуты для своих собственных классов, которые расширяют View или подкласс. Процесс задокументирован в разделе «Создание класса представления» Руководства по разработке для Android под заголовком «Определить пользовательские атрибуты»:

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

0 голосов
/ 08 января 2010

android: keyLabel является одним из многих атрибутов XML, используемых классом Keyboard.Key для каждой клавиши на вашей клавиатуре. android: keyLabel - это то, что вы хотите пометить ключом (например, "w", как показано выше). Атрибуты предварительно определены для класса. Буква "W" - это не Android, а KeyLabel. Если бы вы могли создать android: alternativeKeyLabel, что бы вы ожидали от класса? Я думаю, может быть, вам стоит попытаться объяснить, что вы пытаетесь сделать дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...