有时,我们为了好的布局,会在程序中,动态地获得一个View的宽高。在做一个练习时,我直接将
int width = gridLayout.getWidth()/10; int height = gridLayout.getHeight()/10;
这两句放在了onCreate()中:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getEveryView(); int width = gridLayout.getWidth()/10; int height = gridLayout.getHeight()/10; }
这样,width和height的值为0。
这里,必须注意到,我们如果把这两个函数中,当前的Activity都还没有Create完成,自然宽高均是未定的。所以返回值为0。
然后,我将获取宽高的方法放在onPause中执行
@Override protected void onPause() { super.onPause(); int width = gridLayout.getWidth(); int height = gridLayout.getHeight(); Toast.makeText(getApplicationContext(),width+","+height,Toast.LENGTH_SHORT).show(); }
能够成功地获得宽高。
接着,我将获得宽高的方法放在onResume中执行
@Override protected void onResume() { super.onResume(); int width = gridLayout.getWidth(); int height = gridLayout.getHeight(); Toast.makeText(getApplicationContext(),width+","+height,Toast.LENGTH_SHORT).show(); }
Activity在第一个生命周期时,无法获得宽高。当我Stop之后,再回来,onResume正常获取了宽高。
最后,我将获得宽高的方法放在Button的OnClickListener中
testButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int width = gridLayout.getWidth()/10; int height = gridLayout.getHeight()/10; Toast.makeText(getApplicationContext(),width+","+height,Toast.LENGTH_SHORT).show(); imageView1.setImageBitmap(decodeSampledBitmapFromResource(getResources() ,R.drawable.ic_launcher_big , width ,height)); } });
获得成功。
在此记录,以上。
时间: 2024-10-13 16:54:08