How To Re-position The Grid Layout Elements In Fragments On Orientation Change?
Solution 1:
Target API 13+:
Set the android:configChanges flag in your Activity in manifest.xml
<activityandroid:name="com.test.activity.MainActivity"android:configChanges="orientation|screenSize|keyboardHidden"/>Solution 2:
You need to have two different layouts for portrait and landscape orientation.
it should be named same name, but in different layout directories:
layout dir where your current layout is for Portrait orientation.
Now create layout-land directory, copy same layout and refactor it with same view id's just different positions.
It should look like this:
Solution 3:
I would suggest use RecyclerView pattern with different spanCount after rotation configuration changes.
Also you can calculate span count by screen width or whatever.
So basically in onCreate(), set new GridLayoutManager(context, GRID_SPAN_COUNT_BY_ROTATION) in toRecyclerView
it should look like this in your fragment:
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
Viewroot= inflater.inflate(R.layout.fragment_home, container, false);
RecyclerViewrecyclerView= root.findViewById(R.id.your_recyclerview);
// set span count by orientationintorientation= getResources().getConfiguration().orientation;
int spanCount;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// code for portrait mode
spanCount = 4;
} else {
// code for landscape mode
spanCount = 9;
}
// set GridLayoutManager with custom span count
recyclerView.setLayoutManager(newGridLayoutManager(context, spanCount));
homeViewModel.getText().observe(this, newObserver<String>() {
@OverridepublicvoidonChanged(@Nullable String s) {
}
});
return root;
}
if it is not working then do not forget to change manifest config rules like mentioned in another answer.

Post a Comment for "How To Re-position The Grid Layout Elements In Fragments On Orientation Change?"