1

我开始制作一个游戏,它将有 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 语句),但它似乎没有任何区别......

4

4 回答 4

5

如果我没记错的话,你使用了错误的构造函数,试试这个:

公共Level_Score_bar(上下文上下文,属性集集,int defStyle){
    超级(上下文,设置,defStyle);
    // ...
}

[编辑] 忘了提到,由于您是从 XML 创建视图,Android 将调用此构造函数,如果您愿意,它还允许您使用自定义属性。

于 2011-05-28T22:10:24.107 回答
1

我不确定您要做什么,请添加一些详细信息:xml 文件的名称您的意图,您想对两者都做什么。

但这里有一些一般性建议:

在您的自定义视图类中覆盖其他构造函数。一个参数参数用于从代码加载类,第二个参数是属性集参数,它将用于 xml 构造。

当您在 xml(父)中引用自定义组件(子)时,请使用子类的完全限定类名。(这将加载其子布局)。完全限定是包名+类名

问候, 斯蒂芬

于 2011-05-28T21:05:09.770 回答
0

太简单了,我觉得自己像个白痴……

问题是,基本布局是水平的。只需添加一个 android:orientation="vertical" 就足以使其正常工作。叹。所以,正在发生的事情是显示栏,但在屏幕下方(实际上,在它的右侧),所以它永远不可见。将方向更改为预期的方法修复了该问题,因此可以看到栏,并且不在屏幕外。

于 2011-05-28T23:56:40.870 回答
0

你试过打电话吗?

this.addView(View.inflate(getContext(),R.layout.score_bar_layout,null));
于 2011-05-28T20:55:05.343 回答