我对Android编程世界(最初是iOS开发人员)非常陌生,我对以编程方式添加视图感到有些困惑。我的Activity中有一个自定义的相对布局,我必须动态地添加视图。那就是我被困的地方......所以这是我的自定义视图:
public class BoardView extends RelativeLayout {
// Initialisation
@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int size = width > height ? height : width;
setMeasuredDimension(size, size);
this.addView(new Button(this.getContext()));
}
// Required constructors
public BoardView(Context context) {
super(context);
}
public BoardView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public BoardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}
然后在我的活动中,我试图这样做:
public class MainGameView extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.view);
Button bouton = new Button(this);
bouton.setText("ok");
bouton.setTextColor(Color.BLACK);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(WRAP_CONTENT,WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
params.leftMargin = 107;
layout.addView(bouton, params);
}
}
对我来说似乎很简单,但无法让它工作...... BoardView仍然是空的。任何人都可以解释我应该如何做到这一点吗?提前谢谢。
如果你需要xml来帮助我,这里是: (BoardView在最底部)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="#ffffff">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/barre_menu"
android:id="@+id/relativeLayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="28dp"
android:text="SCORE"
android:id="@+id/textViewScore"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:textColor="#ffffff"
android:layout_marginBottom="20dp"
android:textSize="24sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SCORE"
android:id="@+id/textView3"
android:layout_centerHorizontal="true"
android:layout_gravity="bottom"
android:layout_alignParentEnd="false"
android:layout_above="@+id/textViewScore"
android:textColor="#ffffff"
android:textSize="13sp" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="28dp"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/button"
android:layout_alignTop="@+id/textViewScore"
android:layout_alignBottom="@+id/textViewScore"
android:layout_alignParentLeft="true"
android:layout_marginLeft="20dp"
android:background="@drawable/picto_menu" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="28dp"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/button2"
android:background="@drawable/picto_restart"
android:layout_alignBottom="@+id/textViewScore"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="20dp"
android:layout_alignTop="@+id/textViewScore" />
</RelativeLayout>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
</com.google.android.gms.ads.AdView>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_below="@+id/relativeLayout"
android:layout_centerHorizontal="true"
android:id="@+id/frameLayout">
<fr.wiboyd.arnaud.kilo.Views.TileButton
android:layout_width="100dp"
android:layout_height="100dp"
android:text="0"
android:id="@+id/button3"
android:layout_gravity="center" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/frameLayout"
android:layout_centerHorizontal="true"
android:layout_above="@+id/adView">
<fr.wiboyd.arnaud.kilo.Views.BoardView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/view"
android:layout_gravity="center"
android:background="#cccccc" />
</FrameLayout>
</RelativeLayout>
编辑: 该应用的屏幕截图。灰色方块是BoardView。我希望在其中绘制一个按钮,但它并没有... screenshot