1. 程式人生 > >如何在程式碼中獲取控制元件大小,修改控制元件顯示大小

如何在程式碼中獲取控制元件大小,修改控制元件顯示大小

問題?
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()來實現,暫還沒看到其他方法,若有知道的請指點。