fragment 中获取组件大小" />
当前位置: 代码迷 >> Android >> fragment 中获取组件大小
  详细解决方案

fragment 中获取组件大小

热度:685   发布时间:2016-04-28 01:37:03.0
Android - 总结Activity与Fragment打开的时候获取组件的大小

Activity中获取 组件大小

       代码:

@Override	public void onWindowFocusChanged(boolean hasFocus) {		// TODO Auto-generated method stub		super.onWindowFocusChanged(hasFocus);		Log.d("TAG", "A-button1-->"+button1);		  Log.d("TAG", "A-width-->"+button1.getWidth());	}


    方法:在Activity中重写 onWindowFocusChanged()方法,然后直接在方法里面获取view的大小

    解释:重写view中的onMeasure()方法可以知道,这个方法是用来计算view的宽度和高度,所以只要重写onMeasure()以 后的方法,然后再那个方法里面获取view的大小就行了。通过测试,一个Activity中,各种方法调用顺序如下:

其调用顺序为Activity.oncreate()→Activity.onResume()→
→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→
→Activity.onWidnowFocusChanged()→.....→
→TextImageView.onDraw()

引用自:http://www.xuebuyuan.com/1587193.html

fragment 中获取组件大小

         代码:

	Button button1;		private  int width ; 		private Handler mHandler;	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		mView = inflater.inflate(R.layout.activity_one, null);				mHandler = new Handler(){			@Override			public void handleMessage(Message msg) {				// TODO Auto-generated method stub				super.handleMessage(msg);				if(msg.what == 200){					width =  msg.arg1;					 Log.i("TAG", "button1-->"+button1);					  Log.i("TAG", "width-->"+width);				}							}		};						return mView;	}		@Override	public void onResume() {		// TODO Auto-generated method stub		super.onResume();		initWidget();							  ViewTreeObserver vto = button1.getViewTreeObserver();	  vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {				@Override		public void onGlobalLayout() {			width = button1.getWidth();						Message msg = new Message();			msg.what = 200;			msg.arg1 = width;			mHandler.sendMessage(msg);					}	});	 	  	}

           解释:因为在Fragment中没有onWidnowFocusChanged()这样的方法来重写,所以我们只能找别的方式,根据上面的方法调用顺序,可以看到vto.addOnGlobalLayoutListener()这个也在onMeasure()之后,OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,当界面显示的时候,这个方法也会被调用,所以获取view的大小可以放在这个方法里面


引用自:http://bbs.csdn.net/topics/390672372





  相关解决方案