2015-10-20 92 views
1

我試圖重新比賽2048Android的網格佈局不顯示

當我點擊按鈕「新遊戲」,我開始與PlayActivity一個新的意圖。該按鈕啓動活動,但當視圖顯示時,網格佈局不可見...

該視圖是一個textview,然後GridLayout(這是自定義的,因爲我必須用自定義瓷磚填充它)。 ..

的代碼:

PlayActivity.java

public class PlayActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_play); 
    } 
} 

activity_play.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

    <TextView 
     android:id="@+id/txtScore" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/score" 
     android:background="@color/dark_grey"/> 

    <com.charlotteerpels.oefening1.Board 
     android:id="@+id/board" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </com.charlotteerpels.oefening1.Board> 
</LinearLayout> 

Board.java

public class Board extends GridLayout { 

    Card[][] cardBoard; 
    private int cardHeight; 
    private int cardWidth; 

    public void initBoard(Context context) { 
     this.setColumnCount(4); 
     this.setRowCount(4); 
     this.cardBoard = new Card[4][4]; 
     calculateCardSpecs(context); 
     populateBoard(); 
    } 

    private void calculateCardSpecs(Context context) { 
     WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = size.x; 
     int height = size.y; 
     this.cardWidth = width/4; 
     this.cardHeight = this.cardWidth; 
    } 

    private void populateBoard() { 
     int tilesWithNumber = 0; 
     Random random = new Random(); 

     for(int i=0; i<4; i++) { 
      for(int j=0; j<4; j++) { 
       Card card = new Card(getContext()); 

       if(random.nextInt(2) == 0) { 
        if(tilesWithNumber<2) { 
         card.setTextVisible(); 
         tilesWithNumber++; 
        } 
       } 

       cardBoard[i][j] = card; 
      } 
     } 
     addCardsToView(); 
    } 

    private void addCardsToView() { 
     for(int i=0; i<4; i++) { 
      for(int j=0; j<4; j++) { 
       Card card = cardBoard[i][j]; 
       addView(card, cardWidth, cardHeight); 
      } 
     } 
    } 

    public Board(Context context) { 
     super(context); 
     initBoard(context); 
    } 

    public Board(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initBoard(context); 
    } 

    public Board(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initBoard(context); 
    } 

} 

Card.java

public class Card extends FrameLayout { 

    Random randomGenerator; 
    private int number; 
    Resources res = getResources(); 
    private TextView lblNumber; 

    public void setNumber(int number) { 
     this.number = number; 
    } 

    public int getNumber() { 
     return this.number; 
    } 

    private void initCard(Context context) { 
     lblNumber = new TextView(context); 
     lblNumber.setBackgroundColor(res.getColor(R.color.light_brown)); 

     randomGenerator = new Random(); 
     int r = randomGenerator.nextInt(2); 

     if(r == 0) 
      this.number = 2; 
     else 
      this.number = 4; 
    } 

    public void setTextVisible() { 
     lblNumber.setText(String.valueOf(number)); 
    } 

    public Card(Context context) { 
     super(context); 
     initCard(context); 
    } 

    public Card(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initCard(context); 
    } 

    public Card(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initCard(context); 
    } 
} 

有沒有人有什麼我做錯了的想法? 在此先感謝!

+2

您沒有添加文本視圖到卡上,你只創造它 – RobVoisey

+0

OMG感謝合作!謝謝!我仍然需要做一些用戶界面的更改,因爲這些卡片之間沒有空間,但我會解決這個問題!謝謝! – Charlotte1993

+0

Np,很高興它的工作。 – RobVoisey

回答

0

編輯:RobVoisey找到了答案,我創建TextView的lblNumber在類卡,但我並沒有把它添加到卡...

在方法initCard類卡

所以,我說的的if/else TextView的lblNumber到卡片佈局後:

private void initCard(Context context) { 
    lblNumber = new TextView(context); 
    lblNumber.setBackgroundColor(res.getColor(R.color.light_brown)); 

    randomGenerator = new Random(); 
    int r = randomGenerator.nextInt(2); 

    if(r == 0) 
     this.number = 2; 
    else 
     this.number = 4; 

    addView(lblNumber); 
}