我开始制作一款游戏,它将3个视图叠加在一起,基本上是徽标/广告行,分数行和游戏行。首先,我正在尝试使用名为Level_Score_Bar的类,该类使用名为score_bar_layout的XML布局。现在,我的主要XML代码看起来像这样(注意,我一直根据下面的建议编辑它,如果我修复它,我将停止编辑它):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<LinearLayout android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="fill_parent" android:id="@+id/Title_bar">
<ImageView android:layout_height="wrap_content" android:id="@+id/imageView1" android:layout_width="wrap_content" android:src="@drawable/icon"></ImageView>
<LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/linearLayout4">
</LinearLayout>
</LinearLayout>
<pearsonartphoto.AJEG.Level_Score_bar android:layout_height="fill_parent" android:layout_width="wrap_content" android:id="@+id/Score_Bar">
</pearsonartphoto.AJEG.Level_Score_bar>
<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical" android:id="@+id/Game_Row">
<View android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/view3"></View>
</LinearLayout>
</LinearLayout>
Level_Score_bar.java看起来像这样:
public class Level_Score_bar extends RelativeLayout {
public Level_Score_bar(Context context, AttributeSet set, int defStyle) {
this(context,set);
}
public Level_Score_bar(Context context, AttributeSet set) {
super(context, set);
this.addView(View.inflate(context,R.layout.score_bar_layout,null));
Log.d(TAG,"Added view");
}
}
score_bar_layout.xml看起来像这样
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="@string/level" android:id="@+id/Level_text" android:layout_toRightOf="@+id/Level_text"></TextView>
<TextView android:id="@+id/Current_Level" android:layout_width="wrap_content" android:text="TextView" android:layout_height="wrap_content" android:layout_alignParentTop="true"></TextView>
<TextView android:layout_width="wrap_content" android:text="TextView" android:layout_height="wrap_content" android:layout_centerVertical="false" android:layout_centerHorizontal="true" android:id="@+id/Time_Left"></TextView>
<TextView android:id="@+id/Score_Label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:text="@string/score"></TextView>
<TextView android:layout_width="wrap_content" android:text="TextView" android:layout_height="wrap_content" android:layout_toRightOf="@+id/Score_Label" android:id="@+id/Score_Value"></TextView>
</RelativeLayout>
问题是,我根本没有看到这个观点。我敢肯定我错过了一些小事,但我不能为我的生活弄清楚。我已经确认正在调用addView命令(通过一个Log.d语句),但它似乎没有任何区别......
答案 0 :(得分:5)
如果我没记错的话,你使用的是错误的构造函数,请尝试使用此构造函数:
public Level_Score_bar(Context context, AttributeSet set, int defStyle) { super(context, set, defStyle); // ... }
[编辑] 忘记提及由于您是从XML创建视图,因此Android会调用此构造函数,并且如果您愿意,它还允许您使用自定义属性。
答案 1 :(得分:1)
我不确定您要做什么,请添加一些细节: xml文件的名称 你的意图,你想要做的两件事。
但是这里有一些一般的建议:
在自定义视图类中覆盖其他构造函数。 一个参数参数用于从代码加载类,使用第二个attributeset参数,它将用于xml构造。
当您在xml(父级)中引用自定义组件(子级)时,请使用子级的完全限定类名。 (将加载其子布局)。完全限定的是包名+类名
此致,Stéphane
答案 2 :(得分:1)
这很简单,我觉得自己像个白痴......
问题是,基本布局是水平的。简单地添加一个android:orientation =“vertical”足以让它正常工作。叹。所以,正在发生的事情是酒吧正在显示,但在屏幕下方(实际上,在它的右边),所以它永远不可见。将方向更改为固定的方法,因此可以看到条形图,而不是屏幕外。
答案 3 :(得分:0)
你试过打电话吗?
this.addView(View.inflate(getContext(),R.layout.score_bar_layout,null));