2011-01-25 189 views
7

所以我需要根据屏幕区域改变图像的大小。图像必须是屏幕高度的一半,否则会重叠一些文字。Android根据屏幕大小更改图像大小?

所以高度= 1/2屏幕高度。 宽度=身高*长宽比(只是试图保持宽高比相同)

我发现的东西是:

Display myDisplay = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width =myDisplay.getWidth(); 
int height=myDisplay.getHeight(); 

但我将如何在Java中改变图像高度?如果可能的话甚至是XML?我似乎无法找到可行的答案。

回答

17

您可以在代码中使用LayoutParams。不幸的是,没有办法通过XML来指定百分比(不是直接的,你可以用权重来搞乱,但这并不总是有帮助,它不会保持你的宽高比),但这应该适用于你:

//assuming your layout is in a LinearLayout as its root 
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout); 

ImageView image = new ImageView(this); 
image.setImageResource(R.drawable.image); 

int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
int orgWidth = image.getDrawable().getIntrinsicWidth(); 
int orgHeight = image.getDrawable().getIntrinsicHeight(); 

//double check my math, this should be right, though 
int newWidth = Math.floor((orgWidth * newHeight)/orgHeight); 

//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    newWidth, newHeight); 
image.setLayoutParams(params); 
image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
layout.addView(image); 

可能过于复杂,也许有一个更简单的方法?不过,这是我第一次尝试。

+0

看来我得到一个强制关闭,如果我试图运行这个。如果这有所帮助,在LogCat下,我得到“未捕获的处理程序:由于未捕获的异常导致主线程退出”。我不确定这是什么意思。 Ps.I'm有点新的Android仍然 – QQWW1 2011-01-25 21:00:39

相关问题