ButterKnife внутри фрагмента и высота панели инструментов

Я начинаю использовать ButterKnife, и у меня он работает внутри фрагмента с завышенными представлениями.

Но у меня вопрос, можно ли получить просмотры, которые не накачаны?

Например, у меня есть панель инструментов внутри моей MainActivity, но не внутри фрагмента. Могу ли я получить доступ к этой панели инструментов с помощью ButterKnife?.

И другой вопрос. Я попытался получить высоту панели инструментов, используя:

Toolbar toolbar = getActivity().findViewById(R.id.toolbar);
int toolbarHeight = toolbar.getHeight();

Но это всегда возвращает 0. Как я могу получить размер панели инструментов напрямую из представления? Сейчас я использую:

 getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, typedValueToolbarHeight, true);

Но на самом деле я хотел бы получить панель инструментов из представления.


person JavierSegoviaCordoba    schedule 15.02.2015    source источник
comment
Если вы позвоните внутри oncreate для получения высоты, он вернет ноль. Вызовите его после загрузки макета   -  person Fahim    schedule 15.02.2015
comment
Если вы хотите управлять представлением действия, именно действие должно управлять им и передавать результат интересующему фрагменту. Я уже отвечаю на вопрос по этой теме: stackoverflow.com/questions/17436298/ . Таким образом, через интерфейс вы говорите своей активности что-то делать, активность делает это (единственное условие активности - реализация интерфейса), затем активность отправляет результат в нужный вам фрагмент (либо обратно к тому же или другому в активность).   -  person jpardogo    schedule 15.02.2015


Ответы (1)


Инициализируйте представление и вызовите этот метод в методе создания

 view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @SuppressLint("NewApi")
     @SuppressWarnings("deprecation") 
    @Override 
    public void onGlobalLayout() {
     //now we can retrieve the width and height 
    int width = view.getWidth(); 
    int height = view.getHeight(); 
    //... //do whatever you want with them //... //this is an important step not to keep receiving callbacks: //we should remove this listener //I use the function to remove it based on the api level!
     if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN)
     view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
     else
     view.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    } });
person Fahim    schedule 15.02.2015
comment
хорошо, спасибо за эту информацию :). О ButterKnife, можете ли вы дать мне ответ, чтобы закрыть это? - person JavierSegoviaCordoba; 15.02.2015
comment
Я не использовал нож для масла, но если ваш код инициализации находится в основной деятельности, вы можете - person Fahim; 15.02.2015
comment
Я также вводил в MainActivity, но во фрагменте внедрение не работает для всех представлений, которые не завышены. - person JavierSegoviaCordoba; 15.02.2015