Пользовательское представление в xml расположении

Я создал свое собственное представление путем создания подкласса класса 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.

14
задан monoceres 15 July 2010 в 23:48
поделиться

1 ответ

Вы хотите:

<?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 конструктор: Представление (Контекст, Набор атрибутов) вызывается вместо Представление (Контекст) .

17
ответ дан 1 December 2019 в 09:31
поделиться
Другие вопросы по тегам:

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