0

我有一个自定义的相对布局并添加了一个按钮

 RelativeLayout rel_layout = new RelativeLayout(mcontext);
 RelativeLayout.LayoutParams rel_param = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
 rel.setLayoutParams(rel_param);

 Button b = new Button(mcontext);
 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
 b.setLayoutParams(params);
 b.setText("Test");
 rel_layout.addView(b);

现在,我希望将此相对布局添加到视图中。我的视图类看起来像这样

public class CustomView extends View {

Context mcontext;

public CustomView(Context context) {
    super(context);

    this.mcontext = context;
}

}

在主要活动中,我在 setConentView() 中调用此视图

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new CustomView(this));
}

}

所以现在在屏幕上我应该有一个带有按钮的相对布局。我不应该使用任何 XML。

我需要有关如何添加要添加到我的 CustomView 类中的动态相关的帮助

希望我已经清楚地解释了我的问题。

4

3 回答 3

0

您的自定义视图必须扩展 a ViewGroup,而不是 a View

于 2013-10-24T09:31:06.343 回答
0

你不应该那样做。RelativeLayout是一个ViewGroupViewGroup是一个View可以容纳一个或多个Views 的子项。您应该实现自己的ViewGroup而不是View.
您可以在此处找到实现自定义的教程ViewGroup
https ://developer.android.com/reference/android/view/ViewGroup.html

另外,我想建议您实际上可能想RelativeLayout直接放置在您Activity的上面,并在上面放置一些自定义小部件以及您提到的按钮。

于 2013-10-24T09:36:05.503 回答
0
// try this 
custom_view.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relCustomView"
    android:background="@android:color/darker_gray"
    android:padding="5dp">

</RelativeLayout>

public class CustomView extends View{
    private Context context;

    public  CustomView(Context context) {
        super(context);
        this.context=context;
    }
    public View getCustomView(){
        View v = LayoutInflater.from(context).inflate(R.layout.custom_view,null,false);

        RelativeLayout relCustomView = (RelativeLayout) v.findViewById(R.id.relCustomView);

        Button b = new Button(context);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        b.setLayoutParams(params);
        b.setText("Test");
        relCustomView.addView(b);
        return v;
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new CustomView(this).getCustomView());
}
于 2013-10-25T06:54:48.927 回答