使用自定义视图设置布局

时间:2012-10-15 12:50:26

标签: java android android-layout android-view

我有一个自定义视图类(用于绘图的画布)。当我希望它占据整个屏幕时,我实例化该类并调用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?
}

或者有更好的方法来解决这个问题吗?有关此文档的链接也很受欢迎!

3 个答案:

答案 0 :(得分: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>

关于开发人员指南的custom components的一些文档

答案 1 :(得分: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);

}

答案 2 :(得分:0)

如果要将drawingPanel添加到drawPanelPlaceholder,drawPanlePlaceholder应该扩展ViewGroup。所以它可以是ViewGroup,RelativeLayout,LinearLayout或其他。那你只需要做这个

drawPanelPlaceholder.addView(drawingPanel);
drawPanelPlaceholder.invalidate();