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

概述

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

//向布局中加入卡片
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中获取,保证获取的宽高适合屏幕

@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这个方法是在构造函数执行之后才会执行的,而这个时候布局已经完成了,所以没有办法将卡片加入到布局当中去


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


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

private void initializeGameView() {
setColumnCount(4);
//一行只有4列


setBackgroundColor(0xffbbada0);
//一个灰色的背景


addCards(GetCardWidth(),GetCardWidth());
//向布局中加入卡片


getGesture();
//获取手势



}

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


private int GetCardWidth()
{
//屏幕信息的对象

DisplayMetrics displayMetrics;

displayMetrics = getResources().getDisplayMetrics();


//获取屏幕信息

int cardWidth;

cardWidth = displayMetrics.widthPixels;


//一行有四个卡片,每个卡片占屏幕的四分之一

return ( cardWidth - 10 ) / 4;

}

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


最后

以上就是飞快秀发为你收集整理的addView() 无法显示的问题的全部内容,希望文章能够帮你解决addView() 无法显示的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部