Android получит высоту и ширину макета во фрагменте

Я работаю над фрагментом, и я хочу получить размерlayout содержится вxml fragment layout, Когда я пытаюсь код

RelativeLayout myLayout = view.findViewById(R.id.myLayout);
myLayout.getHeight();

он возвращает 0. Мне нужны эти размеры, чтобы поместить в myLayout другие объекты.

Я пытаюсь использовать:

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

        @Override
        public void onGlobalLayout() {
            mHeight = myLayout.getHeight();  
            mWidth= myLayout.getWidth();
            System.out.println("width: "+mWidth+"   height: "+mHeight);
         }
});

но этот код вызывает много времени, и я нене знаю точно, когда это выполняется. Мне нужны эти размеры вpublic void onActivityCreated () метод. Является ли это возможным?

 M. Reza Nasirloo27 июн. 2014 г., 21:40
Вы нашли какое-нибудь решение?
 Sam06 июн. 2013 г., 06:09
опубликовать файл mylayout xml
 lory10505 июн. 2013 г., 13:11
Это ссылка на относительный макет, объявленный в XML
 Sam05 июн. 2013 г., 12:56
что такое myLayout .. упомяните этот код

Ответы на вопрос(3)

когда происходит небольшое изменение представления. Так что вам нужно убрать этого слушателя из поля зрения.

Простое использование:}

public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){
if (Build.VERSION.SDK_INT < 16) {
    v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
} else {
    v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}

Я бы предложил вам проверить:

if (myLayout.getHeight()>0 && myLayout.getWidth()>0) {
// Do some code...
removeOnGlobalLayoutListener(..)
}

onActivityCreatedМнениееще не было измерено.

Так что нет, вы можетеполучить измерения оттуда.onGlobalLayout это хорошее место, чтобы сделать это. Макеты происходят сразу после измерения.

После этого вы можете удалить слушателя, если хотите сделать это только один раз. Обратите внимание, что макеты могут изменить размер (например, появляются программные клавиатуры)

Чтобы решить эту проблему, просто используйте метод View.post () для вашего фрагмента 'с корневым представлением, и вы можете вызвать getMeasuredHeight () / getMeasuredWidth () и получить фактические значения.

Например.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
        View root=inflater.inflate(R.layout.myfragment, container, false);

        root.post(new Runnable() {
            @Override
            public void run() {
                 int height=root.getMeasuredHeight(); // for instance
            }
        }
    }

Очень аккуратно и аккуратно, без грязного дурака с ViewTreeObserver.I '

Мы тестировали это только на устройствах Android-23, но API применял этот метод начиная с уровня 1.

Во всяком случае, WFM.

 Caner03 июн. 2019 г., 20:00
Спасибо, это хорошее решение для фрагментов.
 Minas Mina09 авг. 2017 г., 10:11
@FernandoGallego Нет, вonViewCreated ширина и высота возвращаются 0.
 Naveen Niraula03 сент. 2018 г., 10:42
Офигенный человек СПАСИБО!
 Fernando Gallego20 апр. 2016 г., 16:26
Я думаю, что вы можете использовать onViewCreated, если вам нужна мера из класса фрагмента, а не из деятельности

Ваш ответ на вопрос