1

私はゲームに取り組み始めています。このゲームでは、基本的にロゴ/広告行、スコア行、およびゲーム行の3つのビューが積み重ねられます。まず、score_bar_layoutというXMLレイアウトを使用するLevel_Score_Barというクラスを作成しようとしています。現在、私のメインの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

私が正しく覚えている場合は、間違ったコンストラクターを使用しています。代わりにこれを試してください。

public Level_Score_bar(Context context、AttributeSet set、int defStyle){
    super(context、set、defStyle);
    //..。
}

[編集]XMLからビューを作成しているため、Androidはこのコンストラクターを呼び出し、必要に応じてカスタム属性を使用することもできます。

于 2011-05-28T22:10:24.107 に答える
1

あなたが何をしようとしているのかわかりません。いくつかの詳細を追加してください:あなたの意図するxmlファイルの名前、あなたが両方で正確に何をしたいのか。

しかし、ここにいくつかの一般的なアドバイスがあります:

カスタムビュークラスの他のコンストラクターもオーバーライドします。1つの引数パラメーターはコードからクラスをロードするためのものであり、2番目の属性セット引数はxml構造に使用されます。

xml(親)でカスタムコンポーネント(子)を参照する場合は、子クラスの完全修飾クラス名を使用してください。(子レイアウトが読み込まれます)。完全修飾はパッケージ名+クラス名です

よろしく、ステファン

于 2011-05-28T21:05:09.770 に答える
0

電話をかけようとしましたか?

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

とてもシンプルで、バカみたいな感じです...

問題は、基本レイアウトが水平方向に配置されていたことです。android:orientation = "vertical"を追加するだけで、正しく機能するようになりました。はぁ。つまり、バーが表示されていたのですが、画面の下(実際にはその右側)に表示されていたため、表示されませんでした。方向を意図した方法に変更すると、バーが表示され、画面外に表示されないように修正されました。

于 2011-05-28T23:56:40.870 に答える