如何获取布局的高度,以编程方式使用元素填充

时间:2017-07-10 11:17:43

标签: android layout height

欢迎所有程序员。当我为Android创建应用程序时,我遇到了一个问题。我想以编程方式创建LinearLayout。然后我想用编程方式填充不同的元素。之后我希望获得此LinearLayout的高度以便将来使用它(例如,用于动画),并将其可见性设置为消失。我在OnCreate of Activity中做的所有这些动作,所以如果我尝试获得高度,我得到0。 任何人都可以帮助我。所有建议将不胜感激。

已更新

对于 Gotiasits Abbas 这里的代码

{{1}}

2 个答案:

答案 0 :(得分:2)

线性布局需要一些时间来衡量,传递给它的孩子和孩子。正确地得到它的高度。所以你必须等到它完成。这是代码

TRIED IT&工作:JAVA代码

    linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            int height = linearLayout.getMeasuredHeight();

            if( Build.VERSION.SDK_INT > 15){
                linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                linearLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });

您为布局设置了一个侦听器,在获得高度后,取消注册GlobalOnLayoutListener

您可以使用linearLayout.getHeight()linearLayout.getMeasuredHeight()。两者都在我的测试中提供了相同的值

XAMARIN代码

  ViewTreeObserver vto = _linearLayout.ViewTreeObserver;       
  vto.GlobalLayout += (sender, args) => {      
    var ht = linearLayout.Height;
   };

答案 1 :(得分:-1)

你最好的猜测可能是,不是试图获得托管(LinearLayout)高度,而是可以获得子项目的高度,并将其乘以托管视图中的项目数。

编辑:以下是可能为您提供所需内容的解决方案。只要能够访问初始化的onCreate(),就可以在onResume()contentContainer中调用此函数。

 public void getHeight(){

    contentContainer.post(new Runnable() {
        @Override
        public void run() {

            int sumHeight=0;
            for(int i=0; i<contentContainer.getChildCount(); i++){
                sumHeight+=contentContainer.getChildAt(i).getHeight();
            }
            Log.d("vidi", "Layout height = " + sumHeight);
        }
    });

同样正如Masked Man所指出的那样,如果你的LinearLayout中有一些填充或边距,你可以用ex来获取它们。 contentContainer.getPaddingBottom并将其添加到总和中。

.post(Runnable)的目的只是推迟Runnable中的代码,即将此代码排队以在绘制Layout之后运行。