2013-08-20 2 views
1

Я хочу создать пользовательский вид Android (MyCustomView). В этом View Я хочу иметь свойство пользовательского типа (MyCustomType). Аналогично этому:Атрибуты пользовательского типа для пользовательского вида Android

MyCustomView extends LinearLayout { 

    private MyCustomType prop1; 

    public MyCustomType getProp1() 
    { 
     return this.prop1; 
    } 

    public void setProp1(MyCustomType value) 
    { 
     this.prop1 = value;} 
    } 
} 

Пока все хорошо. Но теперь я хочу иметь возможность установить значение этого свойства из XML. Я могу создать собственный атрибут с строковым, int, ссылочным форматом, но я не вижу, как определить этот атрибут MyCustomType. Я изображаю что-то похожее на это:

<declare-styleable name="MyCustomView"> 
    <attr name="prop1" format="MyCustomType"/> 
</declare-styleable> 

Возможно ли это как-то? Или атрибуты настраиваемого типа можно установить только с позади?

Спасибо!

+0

Благодарим вас за комментарий, но нет свойств CUSTOM TYPE, заданных из XML. Существует только ссылка, как создать настраиваемое свойство типа string, integer, boolean, reference и т. Д. Пожалуйста, внимательно прочитайте вопрос. –

+0

Хорошо. Вы не можете. См. Мой ответ –

ответ

0

Вы не можете использовать собственные типы недвижимости с андроида рамки. Вы можете получить собственные proprties на основе доступных типов, но все. Не уверен, какой тип вы имели в виду в своем случае, но в большинстве случаев независимо от того, что это такое, его можно решить с помощью доступных примитивов.

+0

ok - спасибо за ваше время! –

1

Я действительно не понимаю, зачем вам это нужно. но вы можете использовать format = "String" и написать полное имя класса в поле свойства в своем макете. Например: обычай: prop1 = «com.example.MyCustomType»

затем в конструкторе Вид:

TypedArray a = context.getTheme().obtainStyledAttributes(
    attrs, 
    R.styleable.MyCustomView, 
    0, 0); 
String className = a.getString(R.id.prop1); 
Class<MySustomType> c = Class.forName(className); 
MySustomType prop = c.newInstance(); 
setProp1(prop); 
Смежные вопросы