怎么在代码中获取控件大小,修改控件显示大小
如何在代码中获取控件大小,修改控件显示大小
小结:
首先应明确一点,竟然我们可以在代码中进行布局,我们就应该有办法对布局中的控件进行大小修改。就如在代码中配置文件中可以设置Acitivity横竖屏自感应,同样可以在代码中实现。
在Acitivity中我们常通过Display来获取屏幕高度和宽度,实现代码如:
2、在代码中想改变某个控件的大小,得通过setLayoutParams()来实现,暂还没看到其他方法,若有知道的请指点。
注:参考网站
http://xindrace.iteye.com/blog/1564903
附:demo在资源里面
问题?
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在资源里面