0

我有一个自定义视图类(用于绘图的画布)。当我希望它占据整个屏幕时,我实例化该类并像这样调用 setContentView:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        drawingPanel = new DrawingPanel(this);
        setContentView(drawingPanel);
}

但是,当我希望屏幕基于 xml 布局 (activity_make.xml) 并带有 2 个元素、一个按钮和一个用于绘图画布的占位符时,如何将我的自定义视图“粘贴”到视图占位符中?

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_make); // the layout which has a button and a placeholder view
      drawingPanel = new DrawingPanel(this); // instantiating my canvas
      View drawPanelPlaceholder = (View) findViewById(R.id.drawingview);
      // how do i stick the drawingPanel into the drawPanelPlaceholder?
}

还是有更好的方法来解决这个问题?也感谢有关此文档的链接!

4

3 回答 3

1

您可以直接在 XML 布局中实例化您的自定义视图。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
  <com.mypackage.DrawingPanel 
      android:id="@+id/drawin_panel"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" />
</LinearLayout>

开发人员指南中有关自定义组件的一些文档

于 2012-10-15T12:55:13.360 回答
1

如果你的 DrawingPanel 类扩展 View 你可以做这样的事情,

在您的 xml 中使用其包名称声明此自定义组件,

<com.myview.DrawingPanel android:id="@+id/drawingview" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" >

请注意,com.myview.DrawingPanel 只是我用来演示的名称。但请确保使用与 DrawingPanel.class 相同的包名称。

现在在你的 onCreate 中,

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_make); 
      drawingPanel = (DrawingPanel) findViewById(R.id.drawingview);

}
于 2012-10-15T12:55:54.053 回答
0

如果您想将您的drawingPanel 添加到drawPanelPlaceholder,drawPanlePlaceholder 应该扩展ViewGroup。所以它可以是 ViewGroup、RelativeLayout、LinearLayout 或其他。然后你只需这样做

drawPanelPlaceholder.addView(drawingPanel);
drawPanelPlaceholder.invalidate();
于 2012-10-15T12:54:26.140 回答