Предупреждение: это может быть ответ перед леденцом на палочке.
A Fragment
не переувеличивается при изменении конфигурации, но вы можете добиться эффекта следующим образом, создав его с помощью FrameLayout
и (повторно) заполнив его вручную:
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
FrameLayout frameLayout = new FrameLayout(getActivity());
populateViewForOrientation(inflater, frameLayout);
return frameLayout;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LayoutInflater inflater = LayoutInflater.from(getActivity());
populateViewForOrientation(inflater, (ViewGroup) getView());
}
private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
viewGroup.removeAllViewsInLayout();
View subview = inflater.inflate(R.layout.my_fragment, viewGroup);
// Find your buttons in subview, set up onclicks, set up callbacks to your parent fragment or activity here.
}
}
Я не особо доволен getActivity()
и связанными звонками здесь, но я не думаю, что есть другой способ получить эти вещи.
Обновление: Удалено приведение от ViewGroup
к FrameLayout
и используется LayoutInflater.from()
и третий параметр inflate()
вместо явного добавления представления.