在android中将自定义视图设置为布局

时间:2013-04-02 05:37:55

标签: android android-layout

我刚刚学习了android开发,我遇到了一些让它工作的问题。

我有一个使用相对布局的活动。我需要它底部有2个按钮,然后在底部正上方,我希望我的自定义视图占据剩下的空间。

viewer.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<sketchViewer.AnimationPanelView
    android:id="@+id/animationView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/homeFromViewerButton"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />

<Button
    android:id="@+id/homeFromViewerButton"
    android:layout_width="640dp"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="Replay" />

<Button
    android:id="@+id/replayButton"
    android:layout_width="640dp"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:text="Home" />

</RelativeLayout>

我遇到的问题是,当我运行程序时,我需要将一些参数传递给我的自定义视图构造函数,以便我的自定义视图决定它应该绘制什么。因此,在创建自定义视图(AnimationPanelView)的实例后,我不确定如何将此对象设置为我为视图提供的空间。

这是我的活动课程:

Viewer.java

public class Viewer extends Activity {

AnimationPanelView animationPanelView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewer);   

    animationPanelView = new AnimationPanelView(this, true /*, more parameters here */);
    animationPanelView.setBackgroundColor(Color.GREEN);
    RelativeLayout v = (RelativeLayout) findViewById(R.id.viewerLayout);
    v.addView(animationPanelView);      
}

现在,使用我的v.addView命令,视图将占据整个页面,覆盖底部的按钮。任何人都可以对此有所了解吗?我觉得自己很亲近,但我已经玩了一段时间了,我似乎陷入困境。

2 个答案:

答案 0 :(得分:1)

查看实施自定义视图部分here。您需要覆盖onLayout和onMeasure,以便告诉您的容器有多大。

答案 1 :(得分:0)

您要在布局中添加另一个自定义视图,而不应该使用 animationPanelView =(AnimationPanelView)findViewById(R.id.animationView); animationPanelView.setBackgroundColor(Color.GREEN);