Я создал свое собственное представление путем создания подкласса класса SurfaceView.
Однако я не могу выяснить, как добавить его из xml файла расположения. Мой текущий main.xml похож на это:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<View
class="com.chainparticles.ChainView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Что я пропустил?
Править
Подробнее
Мое представление похоже на это
package com.chainparticles;
public class ChainView extends SurfaceView implements SurfaceHolder.Callback {
public ChainView(Context context) {
super(context);
getHolder().addCallback(this);
}
// Other stuff
}
И это хорошо работает как это:
ChainView cview = new ChainView(this);
setContentView(cview);
Но ничего не происходит при попытке использовать его от xml.
Вы хотите:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.chainparticles.ChainView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Изменить:
После просмотра остальной части кода он, вероятно, бросает вызов, потому что вы не можете вызвать getHolder
в конструкторе во время наполнения. Переместите это в View # onFinishInflate
Итак:
@Override
protected void onFinishInflate() {
getHolder().addCallback(this);
}
Если это не сработает, попробуйте поместить это в функцию инициализации, которую вы вызываете в своем Activity
s onCreate после setContentView
.
Вероятно, раньше это работало, потому что при надувании из xml конструктор:
Представление (Контекст, Набор атрибутов)
вызывается вместо Представление (Контекст)
.