web-dev-qa-db-ja.com

Android画面にrecyclerviewアイテムを合わせる

困っている! GridLayoutManagerを使用して2つの列といくつかの行を実現するこのRecyclerViewがあります。しかし、これが私の問題です:私はこのRecyclerViewに最大8つのアイテムを持ち、画面サイズに合わせてそれらを合わせたいです

これまでのところ私はこれを持っています:

enter image description here

このコードを使用して:

        Rect rectangle = new Rect();
        Window window = ((Activity)context).getWindow();
        window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
        int statusBarHeight = rectangle.top;
        int contentViewTop =
                window.findViewById(Window.ID_Android_CONTENT).getTop();
        int titleBarHeight= contentViewTop - statusBarHeight;

        final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
                new int[] { Android.R.attr.actionBarSize });
        int mActionBarSize = (int) styledAttributes.getDimension(0, 0);
        styledAttributes.recycle();

        int softButtonsHeight = 0;

        DisplayMetrics metrics = new DisplayMetrics();
        ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(metrics);

        DisplayMetrics realMetrics = new DisplayMetrics();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ((Activity)context).getWindowManager().getDefaultDisplay().getRealMetrics(realMetrics);

            if(realMetrics.heightPixels > metrics.heightPixels){
                softButtonsHeight = realMetrics.heightPixels - metrics.heightPixels;
            }
        }

        ImageView img_Logo = (ImageView)rootView.findViewById(R.id.img_logo_detalhe);

        float logoHeight = 0;
        //convertendo na mão tamanho do sponsor
        if(img_Logo.getVisibility() != GONE) {
            logoHeight = 100 * context.getResources().getDisplayMetrics().density;
        }

        double sizeInPx = (metrics.heightPixels - titleBarHeight - softButtonsHeight - mActionBarSize - logoHeight) / Math.round(list.size() / 2D);

        itensAdapter = new OptionItensAdapter(context, list, (int)sizeInPx);
        rvOptions.setAdapter(itensAdapter);

と内部OptionItensAdapterコンストラクターで私のonBindViewHolder

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, sizeInPx);
        holder.imageButton.setLayoutParams(params);

これを達成するためのアイデアはありますか?前もって感謝します。

8
guisantogui

あなたの問題に対する正確な解決策は、reyclerView向けの新しいフレキシブルレイアウトマネージャーです

フレキシブルレイアウトの詳細

7
Rahul Devanavar

このOnBindViewHolderコードを見て、必要に応じて変更します。D

 @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {

        final int pos = position;
        try {
//
            Resources r = activity.getResources();
            int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics()); // i have bottom tabbar so yf you dont have any thing like this just leave 150 to 0.I think in your case height of image view an your top(Pifer)
            //this change height of rcv
            DisplayMetrics displaymetrics = new DisplayMetrics();
            activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            int height = displaymetrics.heightPixels;
            int width = displaymetrics.widthPixels;
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            params.height = (height - px) / 5; //height recycleviewer (there are 5 rows so divide by 5 but i think in your case there are 4 rows so divide by 4)
            viewHolder.itemView.setLayoutParams(params);
            viewHolder.nameTxt.setText(totalList.get(position).getName());
            viewHolder.icon.setImageResource(totalList.get(position).getIcon());
//           viewHolder.background.setBackground(ContextCompat.getDrawable(context, totalList.get(position).getBackground()));
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

このviewHolderを投稿するだけで、すべてのアイテムが表示されます。

public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView nameTxt;
        public RelativeLayout background;
        public ImageView icon;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);

            nameTxt = (TextView) itemLayoutView.findViewById(R.id.menu_label);
            background = (RelativeLayout) itemLayoutView.findViewById(R.id.menu_background);
            icon = (ImageView) itemLayoutView.findViewById(R.id.menu_icon);
        }
2
taman neupane

私の提案は、RecyclerViewの代わりにこれに似たレイアウトを使用することです。それはどの画面にも適合します。レイアウトは、コードなしで必要な調整をすべて行います。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:weightSum="100">

    <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="20"
        Android:src="@Android:drawable/sym_def_app_icon" />

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="20"
        Android:orientation="horizontal"
        Android:weightSum="100">

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="20"
        Android:orientation="horizontal"
        Android:weightSum="100">

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="20"
        Android:orientation="horizontal"
        Android:weightSum="100">

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="20"
        Android:orientation="horizontal"
        Android:weightSum="100">

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />

        <ImageView
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="50"
            Android:src="@Android:drawable/sym_def_app_icon" />
    </LinearLayout>


</LinearLayout>

enter image description here

2
Lluis Felisart

ここでは、GridLayoutまたはConstraintレイアウトの方がはるかに優れています。

RecyclerViewは(その名前が示すように)リサイクル用です。多くのビュー/子があり、画面上の少数のみがメモリを使用していることを確認する必要がある場合は、リサイクルを使用する必要があります。

代わりにConstraintLayoutを使用すると、各ビューを個別に含めて、グリッドパターンを作成するためにそれらを相互にどのように関連付けるかを定義できます。

以下の私の例のようなGridLayoutは、リサイクルせずにアイテムを整理します。

<GridLayout Android:id="@+id/..."
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_gravity="fill_horizontal".
    Android:orientation="horizontal"
    Android:columnCount="2"
    Android:rowCount="4">

    <OptionItem ...
        Android:weight="1"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content" />
    <OptionItem ...
        Android:weight="1"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content" />
    <OptionItem ...
        Android:weight="1"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content" />
    ...

</GridLayout>

コードで、非表示にする8つのボタンの表示を変更します

button8.setVisibility(View.INVISIBLE); //don't use GONE inside the grid

プログラムでアイテムの幅(または高さ)を設定する場合は、useDefaultMargins="true"とレイアウトパラメータを変更します(- this 回答に従って)

GridLayout.LayoutParams params = (GridLayout.LayoutParams) child.getLayoutParams();
params.width = (parent.getWidth()/parent.getColumnCount()) -params.rightMargin - params.leftMargin;
child.setLayoutParams(params);
1
Nick Cardoso

8つのアイテムを修正した場合、次のようなアイコンサイズにLinearLayoutおよびSDPライブラリを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/activity_main"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    tools:context="Android.com.linearlayouthome.MainActivity">

    <ImageView
        Android:src="@mipmap/ic_launcher"
        Android:layout_width="@dimen/_60sdp"
        Android:layout_height="@dimen/_60sdp"
        Android:layout_gravity="center"/>

    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:weightSum="4">

        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">

                <ImageView
                    Android:src="@mipmap/ic_launcher"
                    Android:layout_width="@dimen/_70sdp"
                    Android:layout_height="@dimen/_70sdp" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="Text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

[〜#〜] sdp [〜#〜] ライブラリを使用すると、さまざまな画面サイズのディメンションファイルを書き込む必要がありません

スクリーンショット:Nexus 4

enter image description here

Nexus 5X:

enter image description here

Nexus 6:

enter image description here

0
SANAT

ビューを画面に固定する必要がある場合は、recyclerViewを使用する必要はありません。ウェイトで遊んで、アイテムを画面に合わせることができます。

あなたのシナリオでは、以下のコードに従うことができます

//llContainer main layout in which you want to put 8 values having orientation vertical
llContainer.setWeightSum(numberofRaws); // It will be 4 if you want to put 8 values

for(int i=1; i<=numberofRaws ; i++ ){
    //Inflate One LinearLayout which has height width Match Parent
    LinearLayout llRaw = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.layout_plain_with_horizontal_orientation, null);
    llRaw.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARRENT, 1.0f));
    AddTwoViewForFaw(llRaw);

    llContainer.AddView(llRaw);


}


public void AddTwoViewForRaw(LinearLayout llRaw){

    View v1 = LayoutInflater.from(getContext()).inflate(R.layout.grideLayout, null);
    // Here you can set values for grid layout by v1.findViewbyId()
    v1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
    llRaw.addView(v1);


    View v2 = LayoutInflater.from(getContext()).inflate(R.layout.grideLayout, null);
    // Here you can set values for grid layout by v2.findViewbyId()
    v2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
    llRaw.addView(v2);
}

それがあなたのために働くことを願っています。

0
Mushahid Khatri
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater
            .from(parent.getContext())
            .inflate(R.layout.item_list, null);

    int height = parent.getMeasuredHeight() / 4;
    int width = parent.getMeasuredWidth();

    view.setLayoutParams(new RecyclerView.LayoutParams(width, height));

    return new ViewHolder(view);
}
0
Hitesh Shukla

メニューが動的に変更されない場合、つまりAPIにメニュー設定がある場合、RecyclerviewまたはGridViewを使用してこのレイアウトを設定する必要はありません。 LinearLayout(s)をいくつかの制約と組み合わせて静的レイアウトに入力することを以前に経験しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:Android="http://schemas.Android.com/apk/res/Android"
     xmlns:app="http://schemas.Android.com/apk/res-auto"
     xmlns:tools="http://schemas.Android.com/tools"
     Android:id="@+id/content_main"
     Android:layout_width="match_parent"
     Android:layout_height="match_parent"
     Android:orientation="vertical"
     Android:weightSum="1">

    <ImageView
        Android:layout_weight="0.8"
        Android:src="@drawable/logo"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <LinearLayout
        Android:layout_weight="0.2"
        Android:weightSum="1"
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <LinearLayout
            Android:weightSum="1"
            Android:layout_weight="0.25"
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>
        <LinearLayout
            Android:weightSum="1"
            Android:layout_weight="0.25"
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>
        <LinearLayout
            Android:weightSum="1"
            Android:layout_weight="0.25"
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>
        <LinearLayout
            Android:weightSum="1"
            Android:layout_weight="0.25"
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>
            <LinearLayout
                Android:gravity="center"
                Android:orientation="vertical"
                Android:layout_weight="0.5"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

                <ImageView
                    Android:src="@drawable/free2"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />

                <TextView
                    Android:gravity="center_horizontal"
                    Android:text="this is text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

これは結果です:

enter image description here

0
jemsnaban

なぜRecyclerViewを使用しているのですか?

アイテム数が決まっている場合、GridLayoutが最適なオプションです。 weightsのオブジェクトで遊ぶことができます。

6 LinearLayoutsを画面に合わせる方法を示す例は次のとおりです

<Android.support.v7.widget.GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.waqasansari.hitwithme.main.fragments.Dashboard">


    <LinearLayout
        Android:id="@+id/myMatches"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="0"
        app:layout_row="0"
        Android:background="@drawable/border_gray"
        Android:orientation="vertical"
        Android:gravity="center">

        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_my_matches"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="My Matches"/>

    </LinearLayout>

    <LinearLayout
        Android:id="@+id/requestMatches"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="1"
        app:layout_row="0"
        Android:background="@drawable/border_gray"
        Android:gravity="center"
        Android:orientation="vertical">

        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_match_requests"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Match Requests"/>

    </LinearLayout>


    <LinearLayout
        Android:id="@+id/proShop"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="0"
        app:layout_row="1"
        Android:background="@drawable/border_gray"
        Android:gravity="center"
        Android:orientation="vertical">

        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_pro_shop"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Pro Shops"/>

    </LinearLayout>

    <LinearLayout
        Android:id="@+id/rankings"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="1"
        app:layout_row="1"
        Android:background="@drawable/border_gray"
        Android:gravity="center"
        Android:orientation="vertical">

        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_rankings"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Rankings"/>

    </LinearLayout>


    <LinearLayout
        Android:id="@+id/courtsAndCoaches"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="0"
        app:layout_row="2"
        Android:background="@drawable/border_gray"
        Android:gravity="center"
        Android:orientation="vertical">


        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_courts_coaches"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Courts &amp; Coaches"/>


    </LinearLayout>


    <LinearLayout
        Android:id="@+id/inviteFriends"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        app:layout_column="1"
        app:layout_row="2"
        Android:background="@drawable/border_gray"
        Android:gravity="center"
        Android:orientation="vertical">

        <ImageView
            Android:layout_width="80dp"
            Android:layout_height="80dp"
            Android:src="@drawable/dashboard_invite_friends"/>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Invite Friends"/>

    </LinearLayout>


</Android.support.v7.widget.GridLayout>

同様の方法でアイテムを追加できます

0

this SO answer link でこのような同様の質問にちょうど答えました

基本的に、画面サイズを取得し、それに応じて高さを調整するので、その要点は次のとおりです。

DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

if(position == 0) {
    holder.itemView.getLayoutParams().width = displayMetrics.width;
    holder.itemView.getLayoutParams().height = displayMetrics.height / 8;
} else {
    holder.itemView.getLayoutParams().width = displayMetrics.width / 2;
    holder.itemView.getLayoutParams().height = displayMetrics.height / 8;
}
0
Kevin Murvie

カスタムグリッド行を追加してサイズを設定し、画面ごとに自動的に調整される自動調整を設定します

0
parik dhakan