您的位置:首页 > 编程语言

如何在代码中获取控件大小,修改控件显示大小

2012-09-09 23:26 344 查看
问题?

1、如何在代码中获取控件在布局文件中宽、高的值,

2、并修改其大小即修改控件的显示比例?

下面用Imageview控件举例来实现此过程。

代码如下:

public class GetWidgetSize extends Activity
{
int imageOriginalHeight = 0;
int imageOriginalWidth = 0;
boolean firstFlag = true;
ImageView image = null;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

image = (ImageView) findViewById(R.id.image);
/*
* 通过setLayoutParams(new LinearLayout.LayoutParams())来还原布局中设置的高度,宽度
*/
Button getBtn = (Button) findViewById(R.id.button1);
getBtn.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
image.setLayoutParams(new LinearLayout.LayoutParams(
imageOriginalWidth, imageOriginalHeight));

}
});
/*
* 通过setLayoutParams(new LinearLayout.LayoutParams())来设置控件显示的大小
*/
Button setBtn = (Button) findViewById(R.id.button2);
setBtn.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
image.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

}
});

/*
* 通过这种方法获取image控件在手机里面显示出来的高度和宽度
*/

ViewTreeObserver vto = image.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{

public void onGlobalLayout()
{

if (firstFlag == true)
{
firstFlag = false;
imageOriginalHeight = image.getMeasuredHeight();
imageOriginalWidth = image.getMeasuredWidth();
System.out.println("imageHeight=" + imageOriginalHeight
+ "  imageWidth==" + imageOriginalWidth);
}
}
});
}
/*
* 重写菜单键,退出程序
*/
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
public boolean onMenuItemClick(MenuItem item)
{
System.exit(0);
return true;
}
});
return true;
}
}


小结:

首先应明确一点,竟然我们可以在代码中进行布局,我们就应该有办法对布局中的控件进行大小修改。就如在代码中配置文件中可以设置Acitivity横竖屏自感应,同样可以在代码中实现。

在Acitivity中我们常通过Display来获取屏幕高度和宽度,实现代码如:

Display display = getWindowManager().getDefaultDisplay();
int height = display.getHeight();
int width = display.getWidth();
但若获取某个控件的高度和宽度,尝试过的哥们都知道,在Acitivity的oncreate()和onPostResume()里都不能获取到控件的大小,通过控件.getHeight()方法得到的都是0,想想原因,在执行onresume后,控件才显示出来,于是oncreate里面获取到0值就可以理解了,至于onPostResume()里面还是0值,还只是想当然,若确定原因,还望指点。了解这些,我们就是通过button点击事件可以获取某个控件的高宽度。

2、在代码中想改变某个控件的大小,得通过setLayoutParams()来实现,暂还没看到其他方法,若有知道的请指点。

注:参考网站

http://xindrace.iteye.com/blog/1564903

附:demo在资源里面

http://download.csdn.net/detail/sunnyfans/4559438
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐