如何在程式碼中獲取控制元件大小,修改控制元件顯示大小
阿新 • • 發佈:2019-02-09
問題?
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值,還只是想當然,若確定原因,還望指點。2、在程式碼中想改變某個控制元件的大小,得通過setLayoutParams()來實現,暫還沒看到其他方法,若有知道的請指點。