Фрагмент не заполняет экран должным образом

#android #android-fragments #measurement

#Android #android-фрагменты #измерение

Вопрос:

Я создаю экземпляр фрагмента внутри другого фрагмента. Внутренний фрагмент имеет свой макет, определенный match_parent по ширине и высоте. И их родительский элемент тоже.

Это код для основного фрагмента. Пользовательский фрагмент, который находится внутри, является внутренним фрагментом. Это обычный фрагмент с календарем.

 public class CalendarFragment extends Fragment {
...
public void onViewCreated( LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState ){
customFragment = new CustomFragment();
                    customFragment.setArguments( bundle );

                    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
                    transaction.add( R.id.calendar_container, customFragment );
                    transaction.commit();
...
}
  

Когда этот фрагмент оживает, внутренний фрагмент, содержащий календарь, корректирует свою высоту в зависимости от содержимого каждой ячейки календаря.
Скриншот. Обратите внимание на пустое пространство:

введите описание изображения здесь Если оба фрагмента имеют match_parent в своем макете, почему происходит такое поведение?

Комментарии:

1. Удалите это в своем Activity , если вы настроены android:fitsSystemWindows="true" .

2. @Ironman У меня нет этого параметра в манифесте. На данный момент мое решение устанавливает минимальную высоту для каждой ячейки на основе высоты родительского фрагмента и количества строк

Ответ №1:

  1. пожалуйста, убедитесь, что ваш контейнер для второго фрагмента (если есть) также match_parent
  2. попробуйте придать фрагменту другой цвет фона (например, android: color / red), чтобы проверить, действительно ли фрагмент уже на весь экран, но имеет прозрачный фон. и ваш просмотр календаря находится только на небольшой части области фрагмента.

Комментарии:

1. Как я уже сказал, оба являются match_parent

Ответ №2:

попробуйте заменить эту строку:

 transaction.add( R.id.calendar_container, customFragment );
  

с помощью этой строки:

 transaction.replace(R.id.calendar_container, customFragment);
  

и добавьте эту строку после строки фиксации:

 getFragmentManager().executePendingTransactions();
  

я надеюсь, что это поможет вам, для меня это делает работу.