2016-09-23 2 views
-2

Я использую ConstraintLayout в своем проекте. Хотя я нахожу проблему, когда пытаюсь вызвать getWidth в onCreate. Результат равен 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

Возможный дубликат [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() на ваш взгляд, и вы получите свои размеры в том, что 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

Смежные вопросы