2013-08-20 3 views
0

У меня есть фрагмент с методом onViewCreate.Android getWidth in Fragment возвращает 0

Я создаю там TableLayout с несколькими строками и колоннами. Я хочу получить высоту и ширину одной ячейки (каждая ячейка имеет одинаковую ширину и высоту). Однако, когда оба cell.getHeight() и cell.getWidth() возвращают 0. Более того, когда я использовал метод() onPreDraw,

private TextView cell 
private int finalHeight; 
private int finalWidth; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light); 
    LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper); 
    View thisView = localInflater.inflate(R.layout.fragment_wizard_table, container, false); 

    final TableLayout table = new TableLayout(App.getAppContext()); 
    for (hoursIter = 0; hoursIter < hours.length; hoursIter++) { 

     TableRow row = new TableRow(App.getAppContext()); 
     for (daysIter = 0; daysIter < initDays().length; daysIter++) { 

      cell = new TextView(App.getAppContext()) 

      // cell.getWidth() here return 0; 
     } 
    } 
    // cell.getWidth() here still returns 0 ; 

    cell.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      cell.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      finalWidth = cell.getWidth(); // it's ok here (work) 
      finalHeight = cell.getHeight(); // it's ok here (works) 
     } 
    }); 

    // BUT NOW: 
    Log.d(TAG, finalWidht + " "); // returns still 0 ? WHY ? 
} 

заранее спасибо за помощь!

ответ

0
  • потому, что последняя линия

    Log.d (TAG, finalWidht + ""); // возвращает еще 0? ЗАЧЕМ ?

будет выполнен до того, как ваш ViewTreeObserver запускает глобальный приемник раскладки. ViewTreeObserver имеет собственные потоки для измерения размеров макета.

+0

так что я должен сделать, чтобы этот код был правильным? – dejvid

+0

правильный код зависит от того, где вы собираетесь использовать ширину и высоту ячейки. вы можете использовать свой собственный код при вызове onGlobalLayout. –

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