Android: Dynamically adapt grid span to card_game size
In order to avoid getting stuck making a new dimension file every time a new device is found we take a known value for how large the game card will be, take the screen size, and adjust the grid accordingly.
This commit is contained in:
parent
f614f94568
commit
eb060c7356
|
@ -6,12 +6,12 @@ import android.os.Bundle;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
|
@ -62,11 +62,33 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
|
|||
public void onViewCreated(@NonNull View view, Bundle savedInstanceState)
|
||||
{
|
||||
mSwipeRefresh = mBinding.swipeRefresh;
|
||||
|
||||
int columns = getResources().getInteger(R.integer.game_grid_columns);
|
||||
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), columns);
|
||||
mAdapter = new GameAdapter(requireActivity());
|
||||
|
||||
// Here we have to make sure the fragment is attached to an activity, wait for the layout
|
||||
// to be drawn, and make sure it is drawn with a width > 0 before finding the correct
|
||||
// span for our grid layout. Once drawn correctly, we can stop listening for layout changes.
|
||||
if (isAdded())
|
||||
{
|
||||
view.getViewTreeObserver()
|
||||
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
|
||||
{
|
||||
@Override
|
||||
public void onGlobalLayout()
|
||||
{
|
||||
int columns = mBinding.getRoot().getMeasuredWidth() /
|
||||
requireContext().getResources().getDimensionPixelSize(R.dimen.card_width);
|
||||
if (columns == 0)
|
||||
{
|
||||
columns = 1;
|
||||
}
|
||||
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), columns);
|
||||
mBinding.gridGames.setLayoutManager(layoutManager);
|
||||
mBinding.gridGames.setAdapter(mAdapter);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Set theme color to the refresh animation's background
|
||||
mSwipeRefresh.setProgressBackgroundColorSchemeColor(
|
||||
MaterialColors.getColor(mSwipeRefresh, R.attr.colorPrimary));
|
||||
|
@ -75,9 +97,6 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
|
|||
|
||||
mSwipeRefresh.setOnRefreshListener(mOnRefreshListener);
|
||||
|
||||
mBinding.gridGames.setLayoutManager(layoutManager);
|
||||
mBinding.gridGames.setAdapter(mAdapter);
|
||||
|
||||
InsetsHelper.setUpList(getContext(), mBinding.gridGames);
|
||||
|
||||
setRefreshing(GameFileCacheManager.isLoadingOrRescanning());
|
||||
|
|
|
@ -7,9 +7,7 @@
|
|||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipe_refresh"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/activity_horizontal_margin">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/grid_games"
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_grid_columns">8</integer>
|
||||
</resources>
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||
(such as screen margins) for screens with more than 1024dp of available width. -->
|
||||
<dimen name="activity_horizontal_margin">96dp</dimen>
|
||||
</resources>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_grid_columns">2</integer>
|
||||
</resources>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_grid_columns">3</integer>
|
||||
</resources>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_grid_columns">4</integer>
|
||||
</resources>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_grid_columns">6</integer>
|
||||
</resources>
|
|
@ -1,5 +0,0 @@
|
|||
<resources>
|
||||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||
(such as screen margins) for screens with more than 820dp of available width. -->
|
||||
<dimen name="activity_horizontal_margin">64dp</dimen>
|
||||
</resources>
|
|
@ -1,8 +1,6 @@
|
|||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
|
||||
<dimen name="spacing_small">4dp</dimen>
|
||||
<dimen name="spacing_medlarge">12dp</dimen>
|
||||
<dimen name="spacing_large">16dp</dimen>
|
||||
<dimen name="card_width">140dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="game_title_lines">2</integer>
|
||||
<integer name="game_grid_columns">1</integer>
|
||||
<integer name="loadsave_state_columns">1</integer>
|
||||
<integer name="loadsave_state_rows">6</integer>
|
||||
|
||||
|
|
Loading…
Reference in New Issue