2017-08-22 95 views
0

有沒有一個普遍接受的方式來做到這一點?我的主屏幕最初看起來像下面的圖片,使用下面的代碼來提示用戶開始遊戲。Android XML佈局分層

Original home screen

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.example.android.snake.SnakeView 
    android:id="@+id/snake" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
       tileSize="24" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
     android:id="@+id/text" 
      android:text="@string/snake_layout_text_text" 
      android:visibility="visible" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:gravity="center_horizontal" 
      android:textColor="#ff8888ff" 
      android:textSize="24sp"/> 
    </RelativeLayout> 
</FrameLayout> 

這個工作,沒有錯誤,但我需要添加用戶輸入項目(EditText上),並顯示最近5分(按鈕),並希望在它下面這個提示,而不是將玩家通過多個屏幕。從我讀過的內容來看,我應該能夠在沒有衝突的情況下在一個RelativeLayout中嵌入一個FrameLayout,但它只適用於Show Scores按鈕,並且缺少遊戲提示。當我在設計視圖中檢查它時,我現在也出現了一個錯誤,即下半部分(現在顯示)沒有實例化允許遊戲玩的類。我只是在自己身邊如何糾正這個問題,並想了解我做錯了什麼,以免在未來的項目中再次發生這種情況。以下是導致錯誤的修改後的代碼。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Username" 
     android:id="@+id/textViewName"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editTextName"/> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     style="?android:attr/buttonStyleSmall" 
     android:text="Add" 
     android:id="@+id/btnAdd"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Last 5 Games" 
     android:id="@+id/btnLastFive"/> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <com.example.android.snake.SnakeView 
     android:id="@+id/snake" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tileSize="24" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/text" 
      android:visibility="visible" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:gravity="center_horizontal" 
      android:textColor="#ff8888ff" 
      android:textSize="24sp"/> 
    </RelativeLayout> 
    </FrameLayout> 
</LinearLayout> 

Proposed layout

+0

所以,你想有一個看起來完全像建議的佈局佈局?或者當你點擊藍色大標籤「Snake按下播放」來顯示提議的佈局時,你想要的是什麼? –

+0

是的。建議的佈局是設計視圖當前在Android Studio中顯示的內容。理論上,主屏幕應該與下半部分顯示的內容完全一樣,顯示原始內容。 –

+0

好的。 'com.example.android.snake.SnakeView'中的內容(引用「我現在也遇到了一個錯誤,即現在顯示的下半部分沒有實例化允許遊戲玩的類。」) ?還有一個問題,當用戶點擊「按下播放」標籤應該消失,只讓「com.example.android.snake.SnakeView」顯示,對吧? –

回答

0

您應該添加在你的根佈局自定義視圖com.example.android.snake.SnakeView的命名空間,並添加命名空間前綴您的自定義視圖的聲明屬性之前。

因此,假設該命名空間是「應用程序」,tileSize變成例如app:tileSize

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    ...... 

    <com.example.android.snake.SnakeView 
     android:id="@+id/snake" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:tileSize="24" /> 

    ..... 

</LinearLayout> 

它還看來你已經刪除的文本內容「蛇向上按播放」從你的TextView @+id/text,否則你贏了無法看到它。

+0

我加了你的建議,但屏幕的下半部分仍然無法加載/實例化SnakeView類。此外,新聞的文本內容是SnakeView中的一種方法的一部分,而不是一個硬編碼的文本,因爲它可以是多個屏幕之一,新聞播放只是我有一個SS的。 –

+0

包名是否正確? –

+0

是的,我在AS中進行了驗證,確保沒有任何意外發生改變。 –