#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:
- пожалуйста, убедитесь, что ваш контейнер для второго фрагмента (если есть) также
match_parent
- попробуйте придать фрагменту другой цвет фона (например, android: color / red), чтобы проверить, действительно ли фрагмент уже на весь экран, но имеет прозрачный фон. и ваш просмотр календаря находится только на небольшой части области фрагмента.
Комментарии:
1. Как я уже сказал, оба являются match_parent
Ответ №2:
попробуйте заменить эту строку:
transaction.add( R.id.calendar_container, customFragment );
с помощью этой строки:
transaction.replace(R.id.calendar_container, customFragment);
и добавьте эту строку после строки фиксации:
getFragmentManager().executePendingTransactions();
я надеюсь, что это поможет вам, для меня это делает работу.