Подтвердить что ты не робот

Как я могу создать свои пользовательские свойства в xml для Android?

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

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

4b9b3361

Ответ 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, что бы вы ожидали от этого класса? Я думаю, возможно, вам стоит попытаться объяснить, что вы пытаетесь сделать.