2016-09-23 118 views
-2

我在我的项目中使用ConstraintLayout。虽然我在尝试在onCreate中调用getWidth时发现问题。结果为0.Android ConstraintLayout getWidth返回0

代码在这里。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_paint); 
    iv = (ImageView) findViewById(R.id.iv); 
    iv.setOnTouchListener(new ImageViewTouchListener()); 

    System.out.println("imageview width:" + iv.getWidth() + " height:" + iv.getHeight()); 
} 

The layout design view

XML内容。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btn_red" 
     android:background="#ff0000" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btn_green" 
     android:background="#00ff00" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/btn_red" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btn_blue" 
     app:layout_constraintLeft_toRightOf="@+id/btn_green" 
     android:background="#0000ff" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintHorizontal_bias="0.0" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <android.support.constraint.Guideline 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/guideline" 
     android:orientation="horizontal" 
     tools:layout_editor_absoluteY="55dp" 
     tools:layout_editor_absoluteX="0dp" 
     app:layout_constraintGuide_percent="0.09784412" /> 

    <SeekBar 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/sb_stroke" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintHorizontal_bias="1.0" 
     android:layout_marginTop="16dp" 
     app:layout_constraintTop_toBottomOf="@+id/btn_green" /> 

    <android.support.constraint.Guideline 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/guideline4" 
     android:orientation="horizontal" 
     tools:layout_editor_absoluteY="103dp" 
     tools:layout_editor_absoluteX="0dp" 
     app:layout_constraintGuide_percent="0.1840796" /> 

    <ImageView 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:id="@+id/iv" 
     app:layout_constraintTop_toTopOf="@+id/guideline4" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     tools:ignore="ContentDescription" 
     android:background="#22000000" 
     app:layout_constraintHorizontal_bias="0.0" 
     app:layout_constraintVertical_bias="0.0" /> 

</android.support.constraint.ConstraintLayout> 

我想知道如何获得正确的ImageView宽度和高度。

我试图让宽度和高度在onStart和的onResume但得到0

+1

的可能的复制[的getWidth()和getHeight()的视图返回0](http://stackoverflow.com/questions/3591784/getwidth-and-getheight-of-view-returns-0) –

+0

这个问题是什么?该问题及其答案可能对其他人很重要 – nandsito

+0

这是一个愚蠢的问题。所以我重写它。 – ittianyu

回答

1

它,因为尚未创建您的看法相同的结果。

iv.post(new Runnable() { 
      @Override 
      public void run() { 
       //height is ready 
       System.out.println("imageview width:" + iv.getWidth() + " height:" + iv.getHeight()); 
      } 
     }); 
+0

谢谢你的帮助! – ittianyu

+0

欢迎您:) –

0

OnCreate()view尚未创建按您的xml参数。因此,您必须在您的视图中添加addOnGlobalLayoutListener(),一旦创建了view,您将获得listener中的尺寸。

iv.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
@Override 
public void onGlobalLayout() { 
    iv.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    System.out.println("imageview width:" + iv.getWidth() + " height:" + iv.getHeight()); 
    } 
}); 
+0

该方法很有用。但是,此方法在API级别16中已弃用。请改用#removeOnGlobalLayoutListener – ittianyu