android — Android - пользовательский интерфейс с пользовательскими атрибутами" />

Android - пользовательский интерфейс с пользовательскими атрибутами

Я знаю, что можно создать пользовательский элемент пользовательского интерфейса (с помощью View или определенного расширения элемента пользовательского интерфейса). Но возможно ли определить новые свойства или атрибуты для вновь созданных элементов пользовательского интерфейса (я имею в виду не унаследованные, но совершенно новые для определения определенного поведения, которое я не могу обработать с помощью свойств или атрибутов по умолчанию)

например. элемент мой пользовательский элемент:

<com.tryout.myCustomElement
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Element..."
   android:myCustomValue=<someValue>
/>

Так можно ли определить MyCustomValue ?

Thx

104 голоса | спросил Waypoint 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 30 Sep 2011 13:30:39 +0400 2011, 13:30:39

2 ответа


0

Да. Краткое руководство:

1. Создать атрибут XML

Создайте новый файл XML внутри /res/values/attrs.xml с атрибутом и его типом

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <declare-styleable name="MyCustomElement">
        <attr name="distanceExample" format="dimension"/>
    </declare-styleable>
</resources>

В основном вы должны настроить один <declare-styleable /> для вашего представления, которое содержит все ваши пользовательские атрибуты (здесь только один). Я никогда не находил полный список возможных типов, поэтому я думаю, вам нужно найти источник. Мне известны следующие типы: ссылка (на другой ресурс), цвет, логическое значение, размерность, число с плавающей точкой, целое число и строка . Они довольно понятны

2. Используйте атрибуты в вашем макете

Это работает так же, как вы сделали выше, с одним исключением. Для вашего пользовательского атрибута требуется свое собственное пространство имен XML.

<com.example.yourpackage.MyCustomElement
   xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Element..."
   customNS:distanceExample="12dp"
   />

Довольно прямо.

3. Используйте значения, которые вам передают

Измените конструктор вашего пользовательского представления для анализа значений.

public MyCustomElement(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
    try {
        distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
    } finally {
        ta.recycle();
    }
    // ...
}

distanceExample в этом примере является закрытой переменной-членом. TypedArray получил множество других вещей для анализа других типов значений.

И это все. Используйте проанализированное значение в вашем View, чтобы изменить его, например. используйте его в onDraw(), чтобы соответственно изменить внешний вид.

ответил 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 30 Sep 2011 13:57:01 +0400 2011, 13:57:01
0

Да, вы можете. Просто используйте тег <resource>.
как это:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CodeFont" parent="@android:style/TextAppearance.Medium">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
    </style>
</resources>

ссылка с официального сайта

ответил Frank Cheng 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 30 Sep 2011 13:42:18 +0400 2011, 13:42:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132