gpt4 book ai didi

java - Android GridLayout 不显示

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:28 25 4
gpt4 key购买 nike

我正在尝试重新创建游戏 2048。

当我单击“新游戏”按钮时,我使用 PlayActivity 启动一个新 Intent 。按钮启动 Activity ,但是当 View 显示时,网格布局不可见...

View 是一个 TextView ,然后是 GridLayout(这是自定义的,因为我必须用自定义图 block 填充它)...

代码:

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);
}

}

卡片.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);
}
}

有人知道我做错了什么吗?提前致谢!

最佳答案

编辑:RobVoisey 找到了答案,我在 Card 类中创建了 TextView lblNumber,但我没有将其添加到 Card...

因此,在 Card 类的 initCard 方法中,我在 if/else 之后添加了 textView lblNumber 到 Card 布局:

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);
}

关于java - Android GridLayout 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com