2015-11-26 4 views
3

Я создал обычай ViewGroup ReadPage, и в деятельности я использую егоВ каком состоянии активности мера это вид

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    pager=(ReadPage)findViewById(R.id.readpage); 
    pager.addArticle("..."); 
} 

Хотя Добавитьстати нужна ширина вида по и высоте

public void addArticle(String s){ 
     articles.add(new Article(s,getMeasuredWidth(),getMeasuredHeight())); 
} 

Но measurewidth и измеренное значение равно 0 в это время. Так что я хочу знать, в каком состоянии будет измеряться вид, чтобы я мог получить правильное значение, которое он показывает на экране.

ответ

1

Этот ответ, вероятно, дает вам то, что вам нужно: https://stackoverflow.com/a/1016941/213528

Вы бы, возможно, использовать его как это:

private int WIDTH; 
private int HEIGHT; 

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

    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    WIDTH = size.x; 
    HEIGHT = size.y; 

    pager = (ReadPage)findViewById(R.id.readpage); 
    pager.addArticle("..."); 
} 

// ... 

public void addArticle(String s){ 
    articles.add(new Article(s, WIDTH, HEIGHT)); 
} 
0

Просмотров измеряются иногда и позже, во время «проходе измерения». Когда изменяется структура представления (из-за добавления, удаления, обновления представления), выполняется измерение, а затем выполняется прогон макета, который пересчитывает размеры и местоположения вида.

Например, вы можете установить текстовые данные в TextView в любое время, но сам вид сам определяет, как его отображать, когда он готов к его отображению. Затем вычисляется текстовая деформация и т. Д., А не при настройке текста.

Вы должны спроектировать представление, отображающее вид Article. Вы можете предоставить данные, но можете просматривать процесс и отображать его дальше, когда вызывается его onSizeChanged(). В представлениях также можно использовать addOnLayoutChangeListener(), чтобы узнать, когда была выполнена макет.

1

Использование ViewTreeObserver

viewToMeasure.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
       viewToMeasure.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      /* you can get the view's height and width here 
       using viewToMeasure.getWidth() and viewToMeasure.getHeight() 
      */       
     } 
    });  
Смежные вопросы