2011-10-14 143 views
0

我有一個名爲Game的類擴展了View。我有一個名爲game.xml的xml:獲取視圖以顯示在LinearLayout中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/game_layout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
</LinearLayout> 

正如你所看到的,它是一個LinearLayout。現在我想要做的是讓我的遊戲視圖顯示在LinearLayout中。下面是遊戲中的相關代碼:

public Game(Activity activ) 
{ 
    activ.setContentView(R.layout.game); 

    ... 

    layout = (LinearLayout)activ.findViewById(R.id.game_layout); 
    layout.addView(this); 

    ... 
} 

public void onDraw(Canvas canvas) 
{ 
    board.draw(canvas); 
} 

現在,當我運行這個它只是一個空白的屏幕。我究竟做錯了什麼?該的onDraw方法是好的,因爲當我這樣做它工作得很好:

public Game(Activity activ) 
{ 
    activ.setContentView(this); 
} 

public void onDraw(Canvas canvas) 
{ 
    board.draw(canvas); 
} 

但爲什麼我不能那樣做的原因了,因爲在平板電腦上有一個在底部的酒吧,在那裏後退按鈕和展鍵盤按鈕是。當我這樣做時,它會在該欄下繪製並切斷圖像。如果我這樣做,然後Android設置佈局的界限,以便它不在該欄下。我寧願用xml佈局來做,因爲我認爲當你使用xml佈局而不是將自定義視圖設置爲內容視圖時,Android會更好。所有相關的答案都很有趣!

+0

你不能刪除導航欄。它是專門爲此構建的,因此用戶可以導入/導出應用程序。 –

回答

0

我認爲你無法看到你的視圖,因爲你沒有選擇任何佈局參數。 在調用addView方法之前試試這個。

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, 
     LayoutParams.FILL_PARENT); 
layout.addView(this); 

這樣做的xml方法是。 在你的xml文件中,你可以包含你的自定義視圖,如

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/game_layout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <com.yourpackage.Game android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
</LinearLayout> 
+0

我必須做一個this.setLayoutParams(lp);對? – John

+0

是的,你需要這樣做。或者這會工作太layout.addView(this,lp); – blessenm

+0

好的謝謝,我會upvote,但我只有3點,但真棒回答! – John

相關問題