Android获取片段中的布局高度和宽度
Posted
技术标签:
【中文标题】Android获取片段中的布局高度和宽度【英文标题】:Android get layout height and width in a fragment 【发布时间】:2013-06-01 00:52:48 【问题描述】:我正在处理一个片段,我想获取包含在xml
fragment layout
中的layout
的维度。
当我尝试代码时
RelativeLayout myLayout = view.findViewById(R.id.myLayout);
myLayout.getHeight();
它返回 0。 我需要将这些尺寸放入 myLayout 其他对象中。
我尝试使用:
myLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener()
@Override
public void onGlobalLayout()
mHeight = myLayout.getHeight();
mWidth= myLayout.getWidth();
System.out.println("width: "+mWidth+" height: "+mHeight);
);
但是这段代码被调用了很多时间,我不知道它是什么时候执行的。
我需要将这些尺寸放入public void onActivityCreated ()
方法中。可能吗?
【问题讨论】:
什么是 myLayout..提及该代码 它是在 XML 中声明的相对布局的引用 发布 mylayout xml 文件 你找到解决办法了吗? 【参考方案1】:有一个更简洁的解决方案,只需在片段的根视图上使用View.post()
方法,您可以调用getMeasuredHeight()/getMeasuredWidth()
并获取实际值。
例如
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
View root = inflater.inflate(R.layout.myfragment, container, false);
root.post(new Runnable()
@Override
public void run()
// for instance
int height = root.getMeasuredHeight();
);
return root;
ViewTreeObserver
非常整洁,没有乱七八糟的东西。
我只用 android-23 设备对此进行了测试,但 API 从级别 1 开始就有这种方法。
无论如何,WFM。
【讨论】:
如果您需要来自片段类而不是活动的度量,我认为您可以使用 onViewCreated @FernandoGallego 不,onViewCreated
中的宽度和高度返回 0。
这是记录在案的行为吗?
@funct7 记录了什么? getMeasuredHeight() 在可见或 View.post 之前不可用?【参考方案2】:
每当视图发生小的变化时,都会调用 addOnGlobalLayoutListener。所以你需要从视图中移除这个监听器。
简单用法:
public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener)
if (Build.VERSION.SDK_INT < 16)
v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
else
v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
我建议你检查一下:
if (myLayout.getHeight()>0 && myLayout.getWidth()>0)
// Do some code...
removeOnGlobalLayoutListener(..)
【讨论】:
【参考方案3】:onActivityCreated
中的视图尚未测量。
所以不,你不能从那里得到测量值。 onGlobalLayout
是个好地方。布局在测量后直接发生。
如果您只想执行一次,您可以在之后移除您的侦听器。请注意,布局可以改变大小(例如出现软键盘)
【讨论】:
以上是关于Android获取片段中的布局高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章