
正确的代码如下所示
TextView tv = (TextView)findViewById(Ridtext);tvgetViewTreeObserver()addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
//这里执行获取位置大小 *** 作
int left = tvgetLeft();
int top = tvgetTop();
int bottom = tvgetBottom();
int right = tvgetRight();
//tv相对于父布局的坐标就得出来了
}
}
view的位置和大小是通过onLayout和onMeasure方法计算出来的,执行到activity的onCreate()方法时,尚未开始计算控件的大小和位置,所以是取不到的
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知
除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:
interfaceViewTreeObserverOnGlobalFocusChangeListener
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserverOnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserverOnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类
interfaceViewTreeObserverOnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interfaceViewTreeObserverOnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
可以通过getActivity()来得到FragmentActivity对象,但是建议不要在Fragment中去 *** 作FragmentActivity的东西,建议在FragmentActivity中封装一些方法。
1Fragment是android30引入的新控件,果应用使用在30以下、16及以上的版本,需要引入v4包。
2Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。
3Fr期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。
4FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的 *** 作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的 *** 作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些 *** 作。
5两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
区别是:setContentView()是获取布局文件而findViewById()是获取布局文件中的控件
联系:如果你的Activity没有对应的布局文件,那么你findViewById()就找不到任何控件,只有Activity绑定了一个布局文件那么findViewById()方法才能获取到该布局文件中的控件
另有参考文章分别详细讲述了两方法
setContentView方法:
>
你是通过哪种方式自定义的AlterDialog呢?
如果是用了AlertDialogBuilder的setView方法,那你之前应该调用过Inflater吧,这时候你已经实例化了alter_dlalogxml得到了一个view,用这个viewfindViewById就行。
以上就是关于android中获得控件的位置(相对于布局文件)全部的内容,包括:android中获得控件的位置(相对于布局文件)、如何在Fragment中获取FragmentActivity中的布局、android中方法setContentView和方法findViewById的区别和联系是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)