求助,Fragment里怎么获取组件的宽度

梦幻雨夜 2013-12-18 03:00:47

我想做个类似于QQ登录时选择QQ号的那种下拉菜单,但是遇到了个问题,我不能获取组件的宽度.试了全部的生命周期,都获取值为0。activity里有onWindowFocusChanged()这个生命周期可以获取组件宽度,Fragment里没有类似的么?
目前想到两个思路,一个是在Fragment的某个生命周期里里获得组件的宽度,另外一个是能不能在activity里获取Fragment的组件,然后在Activity的onWindowFocusChanged()里获取它的组件宽度。
...全文
658 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦幻雨夜 2013-12-19
  • 打赏
  • 举报
回复
引用 7 楼 ncepu307 的回复:
[quote=引用 6 楼 MengHuanYuYe 的回复:] [quote=引用 3 楼 ncepu307 的回复:]
private EditText mEditText;

。。。。
mEditText = (EditText) rootView.findViewById(R.id.edittext);

。。。。。
int width = mEditText.getMeasuredWidth();
说了,是这个生命周期无法获取,我不懂哪个生命周期能获取子Fragment里的组件的宽度,这个是问题[/quote] 不对呀,你点击EditText,再去执行上面的代码,肯定可以获取到这个宽度。因为这个时候EditText已经计算完了尺寸等。
mHandler.post(new Runnable() {
            @Override
            public void run() {
                int width = mEditText.getMeasuredWidth();   
            }
        }, 20);
[/quote] 嘛,我说的是要立即获得这个组件的宽度的……点击后的就不是了,我懂得如何获得了 ViewTreeObserver vto = parent1.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO 自动生成的方法存根 pwidth1 = parent1.getWidth(); } }); 这样可以直接获得组件的宽度。
xiaanming 2013-12-18
  • 打赏
  • 举报
回复
跟Activity获取布局里面的view一样啊
依然绿茶 2013-12-18
  • 打赏
  • 举报
回复
引用 6 楼 MengHuanYuYe 的回复:
[quote=引用 3 楼 ncepu307 的回复:]
private EditText mEditText;

。。。。
mEditText = (EditText) rootView.findViewById(R.id.edittext);

。。。。。
int width = mEditText.getMeasuredWidth();
说了,是这个生命周期无法获取,我不懂哪个生命周期能获取子Fragment里的组件的宽度,这个是问题[/quote] 不对呀,你点击EditText,再去执行上面的代码,肯定可以获取到这个宽度。因为这个时候EditText已经计算完了尺寸等。
mHandler.post(new Runnable() {
            @Override
            public void run() {
                int width = mEditText.getMeasuredWidth();   
            }
        }, 20);
梦幻雨夜 2013-12-18
  • 打赏
  • 举报
回复
引用 3 楼 ncepu307 的回复:
private EditText mEditText;

。。。。
mEditText = (EditText) rootView.findViewById(R.id.edittext);

。。。。。
int width = mEditText.getMeasuredWidth();
说了,是这个生命周期无法获取,我不懂哪个生命周期能获取子Fragment里的组件的宽度,这个是问题
梦幻雨夜 2013-12-18
  • 打赏
  • 举报
回复
引用 4 楼 xiaanming 的回复:
可以在Activity里面直接获取Fragment里面的元素,希望对你有帮助,帮忙投一票吧http://vote.blog.csdn.net/blogstaritem/blogstar2013/xiaanming
如何获取?
xiaanming 2013-12-18
  • 打赏
  • 举报
回复
可以在Activity里面直接获取Fragment里面的元素,希望对你有帮助,帮忙投一票吧http://vote.blog.csdn.net/blogstaritem/blogstar2013/xiaanming
依然绿茶 2013-12-18
  • 打赏
  • 举报
回复
private EditText mEditText;

。。。。
mEditText = (EditText) rootView.findViewById(R.id.edittext);

。。。。。
int width = mEditText.getMeasuredWidth();
梦幻雨夜 2013-12-18
  • 打赏
  • 举报
回复
引用 1 楼 ncepu307 的回复:
你所说的组件是不是Fragment里面子控件? 这个是可以的
是的,就是我在Fragment里有一个EditText,点击会出现一个ListView,但是现在这个ListView的宽度是取决于这个EditText的,所以必须取得这个EditText的宽度才行
依然绿茶 2013-12-18
  • 打赏
  • 举报
回复
你所说的组件是不是Fragment里面子控件? 这个是可以的

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧