簡體   English   中英

使用GridLayoutManager和RecyclerView為自動調整屏幕更改列數

[英]Changing number of columns with GridLayoutManager and RecyclerView for Auto Fit Screen

我在片段中使用Recyclerview ...在片段中,我通過以下方式設置GridLayout:

myTV.setLayoutManager(new GridLayoutManager(getActivity(),3));

代碼說,橫向和縱向模式只有3列

但是我想在用戶旋轉手機/平板電腦時為屏幕顯示設置最大列數....

這是我的PeopleFragment.java

public class PeopleFragment extends Fragment {
    View v;
        List<People> listPeople;
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            v= inflater.inflate(R.layout.fragment_people,container,false);

            listPeople = new ArrayList<>();

            listPeople.add(new People("1-name",R.drawable.image1));
            listPeople.add(new People("2-name",R.drawable.image2));
            listPeople.add(new People("3-name",R.drawable.image3));
            listPeople.add(new People("4-name",R.drawable.image4));
            listPeople.add(new People("5-name",R.drawable.image5));
            listPeople.add(new People("6-name",R.drawable.image6));
            listPeople.add(new People("7-name",R.drawable.image7));

            RecyclerView myTV= (RecyclerView) v.findViewById(R.id.recyclerview_id);
            RecyclerViewAdapterPDF myAdapter = new RecyclerViewAdapterPDF(getActivity(),listPeople);
            myTV.setLayoutManager(new GridLayoutManager(getActivity(),3));
            myTV.setAdapter(myAdapter);

            return v;
      }
    }

fragment_people.java

 <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

我使用了android:numColumns =“ auto_fit” 但我沒工作...

你能告訴我如何解決這個問題嗎?這里是另一個問題...

檢查此以獲得更好的解決方案

在這里,您可以創建一個類以不返回no of columns或直接使用方法。

將此方法添加到您的片段類中。

public int calculateNoOfColumns(Context context) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
    int noOfColumns = (int) (dpWidth / 180);
    return noOfColumns;
}

並將您的適配器代碼更改為

myTV.setLayoutManager(new GridLayoutManager(getActivity(),calculateNoOfColumns(getActivity())));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM