一,在android中当自定义view的时候可能我们需要用到屏幕的宽度和高度,在此记录方法,以后省去度娘
private void initWindowView(){
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int mScreenWidth = dm.widthPixels;
int mScreenHeight = dm.heightPixels;
}
二,在Activity的onCreate()方法中我们可能获取不到view的宽度和高度,那么下面的方法就可以应急了
private void initView() {
mParentLayout = (LinearLayout) findViewById(R.id.parent_layout);
// 获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
mParentLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 获取view的宽和高这里我因为嵌套了ScrollView所以用到Measure的宽和高
mParentWidth = mParentLayout.getMeasuredWidth();
mParentHeight = mParentLayout.getMeasuredHeight();
// 此方法会多次监听。所以在拿到宽和高以后最好取消监听
mParentLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
在包含有ScrollView的容器中,我们如果不想通过onTouchEvent来获取按下还是滑动,那么上面的方法又可以复现了,
private void initView() {
mParentLayout = (LinearLayout) findViewById(R.id.parent_layout);
mScrollView = (ScrollView) findViewById(R.id.scrollview);
// 获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
mParentLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 当焦点改变的时候就会触发
onScrollView(mScrollView.getScrollY());
}
});
}
private void onScrollView(int pos) {
// TODO do something...
}
三,当我们在给屏幕插入广告的时候,图片的宽和高可能不会定死,那么有一个需求说广告的宽度和高度都显示为屏幕的2/3,这时候我们在不自定义view的情况下,就要动态设置图片的宽高了
我们在xml定义好后代码如下
private void initImageView(){
ImageView imageView = (ImageView) findViewById(R.id.iv);
ViewGroup.LayoutParams lp = imageView.getLayoutParams();
// 屏幕宽度的2/3
lp.width = SCREEN_WIDTH_2_3;
// 屏幕高度的2/3
lp.height = SCREEN_WIDTH_2_3;
imageView.setLayoutParams(lp);
}