2014-12-31 2 views
1

Есть ли вероятность, что в мастере ресурсов xml будет иметь базовый вид и когда он будет раздуваться, чтобы преобразовать его в определенный вид?Преобразование представления в представление, которое расширяет вид

Например, имеющий настраиваемое представление под названием MyCustomView, который расширяет EditText, а некоторые виды, которые распространяется MyCustomView как MyCustomViewNumber или MyCustomViewPassword и макет, как это:

<com.example.MyCustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    .....> 
</com.example.MyCustomView> 

Возможно ли, что после того, как я раздувать этот XML, MyCustomView чтобы стать одним из MyCustomViewNumber или MyCustomViewPassword (наследуйте все атрибуты из этих двух). MyCustomViewNumber будет EditText (лучше сказал MyCustomView), который в методе конструктора имеет setInputType для номера.

View baseView = LayoutInflater.from(getContext()).inflate(R.id.my_layout, container, false); 
baseView = new MyCustomViewNumber(getContext()). //with this line I want that my view from the layout to take all attributes from MyCustomViewNumber. 

Резюмируя:

public class MyCustomView extends EditText

public class MyCustomViewNumber extends MyCustomView { ctors > this.setInputType("number"); }

public class MyCustomViewPassword extends MyCustomView{ ctors > same as above }

Inflate MyCustomView. Установите надутое представление в MyCustomViewNumber или MyCustomViewPassword. Является ли это возможным ?

В основном я делаю это, потому что мне нужны «layoutParams». Я знаю, что я мог бы получить параметры макета из завышенного представления, удалить его, а затем добавить новый с этими параметрами.

+0

Я так не думаю. Вы не можете использовать базовый класс для расширенного класса. Возможно только обратное. Это будет убивать концепцию наследования. – Rohit5k2

+0

Вы правы. Но я этого действительно не хочу. Я хочу взять атрибутSet из расширенного класса и передать его базовому классу. – TGeorge

+0

Это то же самое, не так ли? Объект базового класса не может получить атрибуты своего расширенного класса следующим образом. Я чувствую, что вы должны найти другой способ добиться того, что вы пытаетесь сделать. – Rohit5k2

ответ

1

Нет, класс, полное имя которого вы используете в своем XML, создается системой и, следовательно, должен быть конкретным классом.

+0

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