2016-03-28 70 views
0

使用以下Java和XML代码,我想知道如何正确检索内部/子布局(LinearLayout,而父级为RelativeLayout,填充值为20dp的像素)的维度:以像素为单位获取内部布局的大小

Java代码:

public class TestActivity extends Activity { 
    private LinearLayout linLay; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

     linLay = (LinearLayout)findViewById(R.id.linLay); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT); 
     linLay.setLayoutParams(lp); 

     getDimensions(); 
    } 

    private void getDimensions() { 
     System.out.println(linLay.getHeight()); 
     System.out.println(linLay.getWidth()); 
    } 
} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="20dp" > 

    <LinearLayout 
     android:id="@+id/linLay" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true"> 

    </LinearLayout> 
</RelativeLayout> 

...因为我得到的0输出的尺寸,我知道的是,需要的LinearLayout到b首先在屏幕上设置,然后才能检索尺寸......但是我在这里做错了什么?

+1

http://stackoverflow.com/questions/7474572/which-activity-method-is-called-after-all-the-layout-methods-was-made – Entreco

回答

1

当您尝试输出它们时,它没有得到它的尺寸。您可以添加延迟或仅使用下面的方法。

private void getDimensions() { 

    ViewTreeObserver vto = linLay.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
     @Override 
     public voidonGlobalLayout() { 
      linLay.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
      int height =linLay.getMeasuredHeight(); 
      int width =linLay.getMeasuredWidth(); 
      System.out.println(height); 
      System.out.println(width); 
     } 
    }); 

} 
+0

谢谢主席先生! :) – DaveNOTDavid

+0

所以我遇到了另一个问题...如果另一个后台线程(如计时器)正在运行,如何在配置更改期间捕获视图?这里是我的帖子更详细:http://stackoverflow.com/questions/36388337/runnable-and-viewtreeobserver-together-in-one-activity – DaveNOTDavid

+0

@ dpark14它说没有找到页面 –

相关问题