怎么在代码中获取控件大小,修改控件显示大小

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

问题?
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在资源里面