将自定义ImageView添加到主布局

时间:2010-09-15 09:03:49

标签: android layout custom-view

这是交易。

我正在查看有关扩展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布局结合起来的例子。

TNX。

3 个答案:

答案 0 :(得分:2)

您是否在 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" />

我之前通过教程做了这个,但我不记得在哪里。另外,我可能会遗漏一些东西。谷歌一点点,你会发现有用的资源。

编辑:我认为这些是我所遵循的教程,但我不得不付出一些努力才能最终实现:

Official docs

AndDev.org

答案 1 :(得分:0)

我想我解决了。我在main.xml文件中使用了我的代码并且它可以工作。我必须做的是覆盖一个新的类构造函数,接受AttributesSet以及上下文作为参数,然后使用findViewById(CustomViewName)在活动中引用它并使用CustomView中定义的函数。

答案 2 :(得分:0)

  

要允许Android Developer Tools与您的视图进行交互,您必须至少提供一个构造函数,该构造函数将 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);
    }
}

详细Answer here