我是靠谱客的博主 飞快秀发,这篇文章主要介绍addView() 无法显示的问题,现在分享给大家,希望可以做个参考。

在制作一个2048的时候我需要在一个GridLayout中加入2048的中数字的卡片,于是建立了一个方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//向布局中加入卡片 private void addCards(int cardWidth,int cardHeight) { Card card; for(int i = 0;i < 4;i++) { for (int j = 0; j < 4; j++) { //建立卡片的信息 card = new Card(getContext()); card.setNumber(2); //将卡片加入到布局中 addView(card, cardWidth, cardHeight); //记录卡片 cards[i][j] = card; } } }


然后这个方法的卡片的宽高在OnSizeChange中获取,保证获取的宽高适合屏幕

复制代码
1
2
3
4
5
6
7
8
9
10
11
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); int cardWidth = ( Math.min(w,h) - 10 ) / 4; addCards(cardWidth,cardWidth); }


后来却发现这个addView没办法帮我将卡片加入到布局当中去


经过排查,发现,是因为onSizeChange这个方法是在构造函数执行之后才会执行的,而这个时候布局已经完成了,所以没有办法将卡片加入到布局当中去


所以卡片的宽高应该是在构造函数中就已经获取了,所以我做了之后的修改


这是构造函数中自定义的方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void initializeGameView() { setColumnCount(4); //一行只有4列 setBackgroundColor(0xffbbada0); //一个灰色的背景 addCards(GetCardWidth(),GetCardWidth()); //向布局中加入卡片 getGesture(); //获取手势 }

在构造函数中就addCards,然后宽高用另一种方法获取


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private int GetCardWidth() { //屏幕信息的对象 DisplayMetrics displayMetrics; displayMetrics = getResources().getDisplayMetrics(); //获取屏幕信息 int cardWidth; cardWidth = displayMetrics.widthPixels; //一行有四个卡片,每个卡片占屏幕的四分之一 return ( cardWidth - 10 ) / 4; }

这样就不用依赖这个gridLayout中的回调函数去获取屏幕的宽高,从而能够在方法构造阶段就可以读出屏幕的宽高,然后将这个宽高加入到卡片当中去,使得addView()这个函数有效果


最后

以上就是飞快秀发最近收集整理的关于addView() 无法显示的问题的全部内容,更多相关addView()内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部