2

私はこれに対する解決策を見つけるために多くの同様の質問を読んでいますが、運がありません。

MainActivity.java

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.game);
}

game.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<View
    android:id="@+id/adView"
    android:background="@drawable/ad"
    android:layout_width="320dp"
    android:layout_height="50dp"
    />

<my.package.MainGamePanel
    android:id="@+id/gameView"        
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    /> </RelativeLayout>

MainGamePanel.java

public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback {

private MainThread thread;

public MainGamePanel(Context context, AttributeSet a) {
    super(context, a);
    View.inflate(context, R.layout.game, null);
    onFinishInflate();
    thread = new MainThread(getHolder(), this);
    setFocusable(true);
    thread.setRunning(true);

などなど。

そして、MainGamePanelコンストラクターの外側には次の関数があります。

@Override
protected void onFinishInflate() {
    getHolder().addCallback(this);
}

MainThread.javaファイルもありますが、それは問題ではないと思います。

これは実行時の例外です。

java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package/my.package.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class my.package.MainGamePanel

を変更しsetContentViewMainActivityコンストラクターからパラメーターを削除し、を削除するとsetContentView(new MainGamePanel(this))、機能しますが、xmlファイルでカスタムビューを使用する方法を理解したいと思います。AttributeSetView.Inflate(context, R.layout.game, null);

4

1 に答える 1

2

レイアウトを円形に膨らませているように見えます。MainGamePanelを含むR.layout.gameにContentViewを設定します。これには、MainGamePanelを含むR.layout.gameを膨らませるMainGamePanelなどが含まれます。

onCreateメソッドからView.inflate行を削除する必要があります。私が見る限り、それはとにかく何もしていません。また、明示的に呼び出すべきではありませんonFinishInflate。これは、MainGamePanelインスタンスのインフレーションが実際に終了したときに自動的に呼び出されます。

于 2012-11-08T14:53:32.293 に答える