2013-01-22 28 views
2

在我的应用程序中,我有gridview在linearlayout。由于屏幕大小不同,我想计算gridview容器的宽度(在linearlayout中),然后我将决定在屏幕上显示多少列。我的问题是。当我写线性布局(视图)在android中的大小

linearlayout.getwidth(); 

返回0和它的,因为它太早期获得的视图大小onCreate方法。

什么是干净的解决方案,使该视图的高度或宽度。

我试图

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int gridSize = display.getWidth(); 

但Android的说,它不赞成:(

+0

想想你是否真的需要'onCreate()'方法。人们倾向于将所有代码放入这种方法,但有时候这不是一个好主意。了解更多关于'Activity'生命周期:http://developer.android.com/reference/android/app/Activity.html –

+0

我需要这个信息之前观点初始化,因为我想决定多少列应GridView中显示。所以不要onresate不onresume可以帮助解决这个问题...如果我的问题很难解释,然后告诉我,我会解释更多的细节,但帮助有助于帮助。 – abidkhan303

回答

1

Display.getWidth()Display.getHeight()都不赞成赞成Display.getSize(Point) API 13的。为了能够同时与兼容,你必须版本检查,并挑选合适的一个

这是怎么做到这一点:

Point size = new Point(); 
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
if (Build.VERSION.SDK_INT >= 13) { 
    display.getSize(size); // API 13+ 
} else { 
    size.x = display.getWidth(); 
    size.y = display.getHeight(); 
} 

然后后来,size.x是你的宽度。 (不要忘了@TargetApi(13) @SuppressWarnings("deprecation")先于你的方法签名)

请记住,这是该单位的显示宽度;如果您只想获得一个视图的大小,则必须在UI布局后调用它。这与此答案略有无关,但您可以在this thread's answer找到解决方案。

+0

我面临的问题与该代码 \t \t 如果(Build.VERSION.SDK_INT abidkhan303

+0

你为什么使用'VERSION_CODES.GINGERBREAD'?我明确表示要使用13(顺便说一句,是ICS,而不是姜饼)。 – Eric

+0

埃里克没有任何区别。我简单地复制了你的代码,并且在Oncreate方法的开始和Activity的开始处放了@TargetApi(13)@SuppressWarnings(“deprecation”),但是这个问题在那里 – abidkhan303