Добавление пользовательского ImageView в основной макет - PullRequest
1 голос
/ 15 сентября 2010

вот сделка.

Я просматривал этот код о расширении ImageView:

http://marakana.com/forums/android/examples/98.html

и мне было интересно, как я могу добавить новое представление в существующий файл макета xml вместе с некоторыми другими представлениями.

я уже сделал это в своей основной линейной компоновке:

<FrameLayout android:id="@+id/FrameLayout01" android:layout_width="300dp" android:layout_height="300dp">
        <com.marakana.Rose android:layout_height="wrap_content" android:layout_width="wrap_content"/>

но проблема в том, что таким образом метод onDraw не вызывается.

Может кто-нибудь предложить решение для этого? может быть, некоторые примеры, где вы комбинируете CustomViews с макетом xml.

Тпй.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2010

Вы добавили определение в res / values ​​/ attrs.xml ?

<declare-styleable name="Rose">
</declare-styleable>

Я не уверен, нужно ли это, если вы не добавляете какой-либо атрибут xml ...

Кроме того, было бы полезно, если бы вы опубликовали код com.marakana.Rose. Просто в качестве примера, это объявление класса моего собственного компонента:

public class CalendarCell extends ImageButton implements OnTouchListener

onDraw:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

и это фрагмент моего XML-макета:

<TableRow>
        <com.view.customcomponents.CalendarCell
            style="@style/NumericImageButton"
            android:id="@+id/calendar_row1_col1"

            android:background="@drawable/calendar_bg_selector" />

Я сделал это некоторое время назад, следуя инструкции, но я не помню где. Кроме того, я могу что-то упустить. Google немного, и вы найдете полезные ресурсы.

edit: я думаю, что это те учебники, которым я следовал, хотя мне пришлось приложить некоторую работу, чтобы наконец заставить это работать:

Официальные документы

AndDev.org

0 голосов
/ 25 мая 2015

Чтобы инструменты разработчика Android могли взаимодействовать с вашим представлением, как минимум, вы должны предоставить конструктор, который принимает в качестве параметров Context и объект AttributeSet . Этот конструктор позволяет layout editor to create and edit an instance of your view.

class PieChart extends View {
    public PieChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

И подробно Ответ здесь

0 голосов
/ 16 сентября 2010

Я думаю, что решил это.Я использовал свой код в файле main.xml, и он работает.я должен был переопределить новый конструктор класса, принимающий AttributesSet вместе с контекстом в качестве параметра, а затем использовать findViewById (CustomViewName) для ссылки на него в действии и использовать функции, определенные в CustomView.

...