Android getWidth во фрагменте возвращает 0

У меня есть фрагмент с методом onViewCreate.

Я создаю там 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 ?
}

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

1 ответ

Решение
  • потому что последняя строка

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

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

Другие вопросы по тегам