2016-09-23 25 views
-2

私は自分のプロジェクトでConstraintLayoutを使用しています。私はonCreateでgetWidthを呼び出そうとすると問題が発生します。結果は0です。Android ConstraintLayout getWidth return 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

可能な重複(http://stackoverflow.com/questions/3591784/getwidth-and-getheight-of-view-returns-0)[表示ののgetWidth()とのgetHeight()は0を返す] –

+0

質問は何でしたか?質問とその答えが他人にとって重要になる可能性があります – nandsito

+0

これは愚かな質問です。だから私はそれを書き直す。 – ittianyu

答えて

1

そのため、同じ結果を取得しよう。 OnCreate()

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

あなたviewまだxmlパラメータごとに作成されていません。したがって、addOnGlobalLayoutListener()をビューに追加する必要があります。listenerに一度viewが作成されると、サイズが取得されます。

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

関連する問題