গ্রিডলাউট (গ্রিডভিউ নয়) কীভাবে সমস্ত শিশুকে সমানভাবে প্রসারিত করা যায়


217

আমি ভিতরে 2 বোতামের একটি 2x2 গ্রিড রাখতে চাই। এটি কেবলমাত্র আইসিএস তাই আমি দেওয়া নতুন গ্রিডলাউটটি ব্যবহার করার চেষ্টা করছি।

আমার লেআউটের এক্সএমএলটি এখানে:

 <?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/favorites_grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00"
    android:rowCount="2"
    android:columnCount="2">
  <Button
      android:text="Cell 0"
      android:layout_row="0"
      android:layout_column="0"
      android:textSize="14dip" />
  <Button
      android:text="Cell 1"
      android:layout_row="0"
      android:layout_column="1"
      android:textSize="14dip" />

  <Button
      android:text="Cell 2"
      android:layout_row="1"
      android:layout_column="0"
      android:textSize="14dip" />
  <Button
      android:text="Cell 3"
      android:layout_row="1"
      android:layout_column="1"
      android:textSize="14dip" />
</GridLayout>

সমস্যাটি হচ্ছে আমার ভিউগুলি প্রতিটি সারির জন্য সমানভাবে প্রসারিত হয় না। এটি আমার গ্রিডলাউটের ডানদিকে প্রচুর অতিরিক্ত স্থান তৈরি করে।

আমি সেটিংয়ের চেষ্টা করেছি layout_gravity="fill_horizontal"কিন্তু এটি কেবল সারিটির শেষ দৃশ্যে প্রযোজ্য । এর অর্থ সেল 1 এর জন্য পর্যাপ্ত জায়গা দেওয়ার জন্য সেল 1 সমস্তভাবে প্রসারিত।

কীভাবে এটিকে মোকাবেলা করার চিন্তাভাবনা?


আপনি কেন এই বোতাম উপাদানগুলিতে নির্দিষ্ট বিন্যাস_ প্রস্থ এবং লেআউট_ উচ্চতার আকার নির্ধারণ করেন নি?
ইগোরগানাপলস্কি

আপনার ক্ষেত্রে টেবিললআউট কেন ব্যবহার করবেন না?
খিতস্পেস

1
ললিপপ-এ আমরা এখন Android.support.v7.widget.GridLayout, 3 টি কলাম গণনা ব্যবহার করতে পারি এবং তারপরে কাঙ্ক্ষিত অর্জনের জন্য প্রতিটি কলামে <টেক্সটভিও <<স্পেস অ্যাপ্লিকেশন: লেআউট_ক্লোমওয়েট = "1" /> <টেক্সটভিউ> ব্যবহার করতে পারি সমস্ত অতিরিক্ত ওভারহেড ছাড়াই প্রভাব ফেলুন, যদি না আপনি একচেটিয়া এসডিকে 21 এর জন্য নির্মাণ করছেন এবং তারপরে আপনি সাধারণ গ্রেডলআউট ব্যবহার করতে পারেন
অলডায়আমাজিং

উত্তর:


77

আপডেট : 21 এপিআই হিসাবে ওজনগুলি সমর্থিত more আরও তথ্যের জন্য পলটির উত্তর দেখুন। সমাপ্তি আপডেট গ্রিডলাউট ব্যবহার করার সময় সীমাবদ্ধতা রয়েছে, ডকুমেন্টেশন থেকে নিম্নলিখিত উদ্ধৃতি গৃহীত হয়েছে ।

"গ্রিডলাউট ওজনের সংজ্ঞা অনুসারে ওজন নীতিটির পক্ষে সমর্থন দেয় না general সাধারণভাবে, তাই একাধিক সারি বা কলামগুলির মধ্যে অপ্রয়োজনীয় অনুপাতের অতিরিক্ত স্থান বিতরণের জন্য গ্রিডলাউটটি কনফিগার করা সম্ভব নয় ... সম্পূর্ণ নিয়ন্ত্রণের জন্য একটি সারিতে বা কলামে অতিরিক্ত স্থান বিতরণ; সম্পর্কিত সেল গ্রুপে উপাদানগুলি ধরে রাখতে লিনিয়ারলআউট আউটভিউ ব্যবহার করুন। "

এখানে একটি ছোট উদাহরণ যা লিনিয়ারালাউট সাবভিউগুলি ব্যবহার করে। (আমি স্পেস ভিউ ব্যবহার করেছি যা অব্যবহৃত অঞ্চল নেয় এবং বোতামগুলিকে কাঙ্ক্ষিত অবস্থানে ঠেলে দেয়))

<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="1"
>
    <TextView
        android:text="2x2 button grid"
        android:textSize="32dip"
        android:layout_gravity="center_horizontal" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="horizontal">
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button 1" />
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:text="Button 2" />
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
    >
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button 3" />
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:text="Button 4" />
        <Space
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>
</GridLayout>

117
1 এর কলামের এই গ্রিডলাউটটি উল্লম্ব দিকনির্দেশে বেশ লিনিয়ারলআউট। এটি বিন্যাসটিকে আরও জটিল করে তুলেছে। গ্রিডলআউট সরল করার এবং নেস্টেড লেআউটটি সরিয়ে নেওয়ার কথা।
জয় মাইও হেতেট

17
সবেমাত্র একটি উপায় খুঁজে পেয়েছি! অ্যান্ড্রয়েড layout_gravity = "fill_horizontal"। আপনি যদি সাপোর্ট লাইব্রেরি ব্যবহার করছেন তবে এরপরে এটি গ্রিডে পরিবর্তন করুন: লেআউট_গ্রাভিটি = "ফিল_হরিজন্টাল"
জুবিয়েটারোবর্টো

6
আমি উইন মাইও হেটের সাথে একমত এটি অ্যান্ড্রয়েডের জবাবটি বলে মনে হচ্ছে এমন উত্তর বলে মনে হচ্ছে তবে লিনিয়ারআউটয়ের তুলনায় এটি কীভাবে উন্নতি হয় তা দেখতে আমি ব্যর্থ। আমি ভেবেছিলাম গ্রিডলাউটের কারণটি ছিল নেস্টেড লিনিয়ারলআউটগুলি এড়ানো? গ্রিডলআউটের জন্য এখন আমি ব্যবহারের কেস দেখতে পাচ্ছি না যা বোঝা যায়।
মিচ

4
এপিআই 21 হিসাবে, ওজন সমর্থিত
সাইব

7
সাপোর্ট গ্রন্থাগারে GridLayout সংস্করণ ওজন সমর্থন করে এবং পিছন এপিআই 7. সামঞ্জস্যপূর্ণ developer.android.com/reference/android/support/v7/widget/...
জ্যাকব Tabak

311

এপিআই 21-এ শুরু করে গ্রিডলাউটটিতে ওজনের ধারণা যুক্ত করা হয়েছিল। পুরানো অ্যান্ড্রয়েড ডিভাইসগুলিকে সমর্থন করার জন্য, আপনি ভি 7 সমর্থন লাইব্রেরি থেকে গ্রিডলাউট ব্যবহার করতে পারেন।

নীচের এক্সএমএল আপনি কীভাবে পর্দার প্রস্থ পূরণ করতে ওজন ব্যবহার করতে পারেন তার একটি উদাহরণ দেয়।

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:grid="http://schemas.android.com/apk/res-auto"

    android:id="@+id/choice_grid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:padding="4dp"

    grid:alignmentMode="alignBounds"
    grid:columnCount="2"
    grid:rowOrderPreserved="false"
    grid:useDefaultMargins="true">

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile1" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile2" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile3" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile4" />

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

21
এই উত্তরটি উচ্চতর হওয়া উচিত।
এসডি

5
এটি একই সাথে উল্লম্ব এবং অনুভূমিক উভয়ই পূরণ করতে ব্যবহৃত হতে পারে? আমি সমানভাবে প্রসারিত 3x3 লেআউট চাই তবে উভয় ওজন কাজ করে না এমন চেষ্টা করে।
এডুয়ার্ডো নাভেদা

আমার একটি বিশেষ ঘটনা ছিল যেখানে আমাকে কীপ্যাডের অংশ হিসাবে FrameLayoutএকটি Button and an চিত্রবিউ `(একটি বোতামে আইকনটি চাপানো ছিল যা স্পর্শ করার সময় ভিজ্যুয়াল প্রতিক্রিয়া দেখিয়েছিল ... দীর্ঘ গল্প) ব্যবহার করতে হয়েছিল। সেটিং columnWeightএবং gravityপ্রতিটি অন্যান্য Buttonসূক্ষ্মভাবে কাজ করে , তবে এটি ভেঙে যায় FrameLayoutFrameLayoutপ্রত্যাশিত হিসাবে সমানভাবে সাজানো সমস্ত কিছু তৈরি করার জন্য এটিকে রেখে দেওয়া ।
psyren89


1
হ্যালো, আকর্ষণীয় উত্তর তবে গ্রিড যুক্ত করা কীভাবে সম্ভব: স্ফীত বাচ্চাদের জন্য কর্মসূচীগতভাবে লেআউট_ক্লোমওয়েট = "1"?
ওয়াজা_বি

78

এখানে চিত্র বর্ণনা লিখুন

অ্যাপকম্প্যাট 21 গ্রিডলয়েটের কলাম এবং সারি ওজন রয়েছে যা উপরের চিত্রের মতো গ্রিডলেটে প্রতিটি গ্রিড আইটেম সমানভাবে তৈরি করতে নীচের মতো ব্যবহার করা যেতে পারে।

<android.support.v7.widget.GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
grid:alignmentMode="alignBounds"
grid:columnCount="4">
<Button android:layout_width="0dp"
    style="?buttonStyle"
    android:layout_height="0dp"
    android:text="-1"
    grid:layout_columnWeight="1"
    grid:layout_rowWeight="1"
    grid:layout_gravity="fill"/>
...
...
...


আমার কাছে যদি কেবল দুটি কলম থাকে তবে আপনি কীভাবে সন্তানের দৃষ্টিভঙ্গিগুলিকে কেন্দ্র করবেন?
মুহাম্মদ বাবর

17
compile "com.android.support:gridlayout-v7:$supportVersion"
মিহা_এক্স 64

আমার ক্ষেত্রে, সংকলন নির্দেশিকা যুক্ত করার পরে - অতিরিক্তভাবে গ্রিড বৈশিষ্ট্যগুলি (যেমন app:columnCount="2") অ্যাক্সেস করতে সক্ষম হওয়ার জন্য xML এ এই "অন্তর্ভুক্ত" কলটি সরবরাহ করতে হয়েছিল :xmlns:app="http://schemas.android.com/apk/lib/android.support.v7.widget.GridLayout"
জিন বো বো

42

স্ক্রোলভিউ দিয়ে ভি 7 সমর্থন লাইব্রেরি ছাড়াই এপিআই 21-এ শুরু করা:

এখানে চিত্র বর্ণনা লিখুন

এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <GridLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:columnCount="2"
            >

        <TextView
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_columnWeight="1"
            android:gravity="center"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colorAccent"
            android:text="Tile1" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_columnWeight="1"
            android:gravity="center"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colorPrimaryDark"
            android:text="Tile2" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_columnWeight="1"
            android:gravity="center"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colorPrimary"
            android:text="Tile3" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_columnWeight="1"
            android:gravity="center"
            android:layout_gravity="fill_horizontal"
            android:background="@color/colorAccent"
            android:text="Tile4" />

    </GridLayout>
</ScrollView>

আমি এটি ব্যবহার করছি। ধন্যবাদ!
রাজ বেদি

35

আপনি গতিশীলভাবে প্রতিটি সন্তানের প্রস্থ নির্ধারণ করতে পারেন:

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

3
যখন বিরতি বলে মনে হয় useDefaultMargins="true"- তাদের সঙ্গে ঠিকভাবে কাজ করার জন্য সেটfalse
রিচার্ড লে Mesurier

16

আপনার গ্রিডলআউট অনুচ্ছেদে নিম্নলিখিতগুলি যুক্ত করার চেষ্টা করুন। এটা কাজ করা উচিত।

android:useDefaultMargins="true"

এবং এটির সাথেই, আমি এটিকে আবার গ্রিডলআউট বলতে পারি!
clwhisk

উচিত কিন্তু আসলে না।
m0skit0

15

এটি সঠিক উত্তর

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/favorites_grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00"
    android:rowCount="2"
    android:columnCount="2">
    <Button
        android:text="Cell 0"
        android:layout_row="0"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:textSize="14dip" 
        />
    <Button
        android:text="Cell 1"
        android:layout_row="0"
        android:layout_column="1"
        android:textSize="14dip"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"/>

    <Button
        android:text="Cell 2"
        android:layout_row="1"
        android:layout_column="0"
        android:textSize="14dip"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"/>
    <Button
        android:text="Cell 3"
        android:layout_row="1"
        android:layout_column="1"
        android:textSize="14dip"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"/>
</GridLayout>

এত দেরিতে মন্তব্য করার জন্য
চটজলদি

1
অ্যাট্রিবিউট লেআউট_সামগ্রীওয়েট কেবলমাত্র API স্তরের 21 এবং উচ্চতর ব্যবহৃত হয়
বিকাশ পারাজুলি

7

অবশেষে আমি সমাধানটি খুঁজে পেলাম। যেমন রোটেম্মিজ বলেছেন, আপনার এটি পরে গতিশীল করতে হবে। এই কোডটি অনুভূমিকভাবে ভিউ পূরণের জন্য বোতামগুলি প্রসারিত করে তবে উল্লম্বভাবে এটি করা যেতে পারে।

public void fillview(android.support.v7.widget.GridLayout gl)
{
    Button buttontemp;

    //Stretch buttons
    int idealChildWidth = (int) ((gl.getWidth()-20*gl.getColumnCount())/gl.getColumnCount());
    for( int i=0; i< gl.getChildCount();i++)
    {
        buttontemp = (Button) gl.getChildAt(i);
        buttontemp.setWidth(idealChildWidth);
    }
}

(২০ টি অভ্যন্তরীণ এবং বাহ্যিক প্যাডিং এবং মার্জিনের জন্য। এটি আরও সর্বজনীনভাবে করা যেতে পারে তবে এটি আরও পরিষ্কার)

তাহলে এটিকে এভাবে বলা যেতে পারে:

    android.support.v7.widget.GridLayout gl = (android.support.v7.widget.GridLayout)findViewById(R.id.buttongrid);
    ViewTreeObserver vto = gl.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Override public void onGlobalLayout() 
    {

            android.support.v7.widget.GridLayout gl = (android.support.v7.widget.GridLayout) findViewById(R.id.buttongrid);
            fillview(gl);

            ViewTreeObserver obs = gl.getViewTreeObserver();
            obs.removeGlobalOnLayoutListener(this);
    }});

এটি অবশ্যই একটি পর্যবেক্ষকের সাথে করা উচিত কারণ ভিউগুলি কল করার আগে আমাদের দৃষ্টিভঙ্গির জন্য অপেক্ষা করা দরকার।


7

আমার ক্ষেত্রে আমি বোতামগুলি গতিশীলভাবে যুক্ত করেছিলাম তাই আমার সমাধানের জন্য কিছু এক্সএমএল অংশ এবং কিছু জাভা অংশ প্রয়োজন। আমাকে কয়েকটি ভিন্ন জায়গা থেকে সমাধানগুলি সন্ধান করতে এবং মিশ্রিত করতে হয়েছিল এবং আমি ভেবেছিলাম যে আমি এটি এখানে ভাগ করব যাতে অনুরূপ সমাধানের সন্ধান করা অন্য কারওর পক্ষে এটি সহায়ক হতে পারে।

আমার লেআউট ফাইলের প্রথম অংশ এক্সএমএল ...

<android.support.v7.widget.GridLayout
    xmlns:grid="http://schemas.android.com/apk/res-auto"
    android:id="@+id/gl_Options"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    grid:useDefaultMargins="true">
</android.support.v7.widget.GridLayout>

grid:useDefaultMargins="true"প্রয়োজনীয় নয় তবে আমি যুক্ত করেছি কারণ এটি আমার কাছে আরও ভাল লাগছিল, আপনি এখানে কিছু উত্তরে উল্লিখিত হিসাবে অন্যান্য ভিজ্যুয়াল এফেক্টস (যেমন প্যাডিং) প্রয়োগ করতে পারেন। বোতামগুলির জন্য এখন আমি এগুলি গতিশীলভাবে যুক্ত করতে চাই। এই বোতামগুলি তৈরি করার জন্য এখানে আমার কোডের জাভা অংশটি রয়েছে, আমি কেবলমাত্র এই প্রসঙ্গে সম্পর্কিত লাইনগুলি অন্তর্ভুক্ত করছি। ধরুন myOptionsআমার কোডে যতগুলি পাওয়া যায় সেগুলি থেকে আমাকে বোতাম তৈরি করতে হবে এবং আমি অনক্লিকলিস্টনার কোডটিও অনুলিপি করছি না।

import android.support.v7.widget.GridLayout;   //Reference to Library

public class myFragment extends Fragment{
    GridLayout gl_Options;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        gl_AmountOptions = (GridLayout)view.findViewById( R.id.gl_AmountOptions );
        ...
        gl_Options.removeAllViews();     // Remove all existing views
        gl_AmountOptions.setColumnCount( myOptions.length <= 9 ? 3: 4 );  // Set appropriate number of columns

        for( String opt : myOptions ) {
            GridLayout.LayoutParams lParams   = new GridLayout.LayoutParams( GridLayout.spec( GridLayout.UNDEFINED, 1f), GridLayout.spec( GridLayout.UNDEFINED, 1f));
            // The above defines LayoutParameters as not specified Column and Row with grid:layout_columnWeight="1" and grid:layout_rowWeight="1"
            lParams.width = 0;    // Setting width to "0dp" so weight is applied instead

            Button b = new Button(this.getContext());
            b.setText( opt );
            b.setLayoutParams(lParams);
            b.setOnClickListener( myClickListener );
            gl_Options.addView( b );
        }
    }
}

যেহেতু আমরা গ্রিডলাইআউট সমর্থন গ্রন্থাগার থেকে ব্যবহার করছি এবং স্ট্যান্ডার্ড গ্রিডলাউট নয় তাই আমাদের ফাইলটিতে গ্রেডটি বলতে YourProject.gradeহবে।

dependencies {
    compile 'com.android.support:appcompat-v7:23.4.0'
    ...
    compile 'com.android.support:gridlayout-v7:23.4.0'
}

গ্রিডলয়েআউট.লাইআউটপ্যারামস গ্রিডলাউট.স্পেক (গ্রিডলাউট.উন্ডেফাইনড, 1 এফ) কেবল তখন গ্রিডে দুর্দান্ত কাজ করেছে: ইউজডাফল্টমার্গিন মিথ্যা ছিল। এছাড়াও, lParams.width = 0 এর প্রস্থ এবং উচ্চতা লেআউটপ্যারামস দ্বারা সেট করা হওয়ায় এর কোনও ব্যবহার নেই বলে মনে হচ্ছে।
আইচলোস

4

আপনি লেআউট পদ্ধতিতে ভিউগ্রুপকে ওভাররাইড করে এটিকে আরও দ্রুত করতে পারেন। এটি আমার সর্বজনীন সমাধান:

package your.app.package;

import android.content.Context;
import android.view.ViewGroup;

public class GridLayout extends ViewGroup {

    public GridLayout(Context context) {
        super(context);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        final int columns = 2;//edit this if you need different grid
        final int rows = 2;

        int children = getChildCount();
        if (children != columns * rows)
            throw new IllegalStateException("GridLayout must have " + columns * rows + " children");

        int width = getWidth();
        int height = getHeight();


        int viewWidth = width / columns;
        int viewHeight = height / rows;

        int rowIndex = 0;
        int columnIndex = 0;

        for (int i = 0; i < children; i++) {
            getChildAt(i).layout(viewWidth * columnIndex, viewHeight * rowIndex, viewWidth * columnIndex + viewWidth, viewHeight * rowIndex + viewHeight);
            columnIndex++;
            if (columnIndex == columns) {
                columnIndex = 0;
                rowIndex++;
            }
        }
    }

}

সম্পাদনা: বাচ্চাদের পক্ষে ম্যাচ পিতামাতাকে ভুলবেন না!

android:layout_width="match_parent"
android:layout_height="match_parent"

ভাল হতে পারে তবে বাচ্চাদের প্যাডিং এবং মার্জিনের জন্য সহায়তা প্রয়োজন
পাসকাল

1
বাচ্চাদের প্যাডিং সমর্থন করা হয়, কারণ এটি শিশুকে এট্রিবিউট সেট করে। মার্জিন সমর্থন যুক্ত করতে, কেবল "লেআউট" ফাংশনটির সাহায্যে লাইনটি নিম্নরূপে সংশোধন করুন (যেখানে মার্জিন ভেরিয়েবল পিক্সেলের মধ্যে মার্জিন):getChildAt(i).layout(viewWidth * columnIndex + margin, viewHeight * rowIndex + margin, viewWidth * columnIndex + viewWidth - margin, viewHeight * rowIndex + viewHeight - margin);
ব্যবহারকারী 1557434

3

আমি যে সর্বোত্তম সমাধানটি খুঁজে পেতে পারি তা হ'ল আপনি যে প্রতিটি সারি চান তার জন্য একটি লিনিয়ার লেআউট (অনুভূমিক) ব্যবহার করুন এবং এর মধ্যে বোতামটি (সেল) প্রস্থকে 0 ডিপি এবং ওজন 1 নির্ধারণ করুন the 0 ডিপি এবং ওজনে 1. নীচের কোডটি সন্ধান করুন- এছাড়াও অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি = "সেন্টার_ভার্টিকাল" ব্যবহার করে যদি ভেরিয়েবলের দৈর্ঘ্যের পাঠ্য থাকে তবে সারি বোতামগুলিকে সারিবদ্ধ করার জন্য ব্যবহৃত হয়। 0 ডিপি এবং ওজন ব্যবহার করে এটি একটি সুন্দর ঝরঝরে এখনও এতটা সুপরিচিত নয়।

<LinearLayout
 android:id="@+id/parent_layout"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/button_bue_3d"
 android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/layout_row1"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"

                android:orientation="horizontal" >

                <Button
                    android:id="@+id/button1"
                    style="?android:attr/buttonStyleSmall"
                   android:layout_height="wrap_content"
                   android:layout_width="0dp"
                   android:layout_weight="1"
                    android:clickable="false"
                   android:layout_gravity="center_vertical"
                    android:text="ssssssssssssssssssssssssss" />

                <Button
                    android:id="@+id/button2"
                    style="?android:attr/buttonStyleSmall"
                    android:clickable="false"
                    android:layout_height="wrap_content"
                     android:layout_width="0dp"
                   android:layout_weight="1"
                   android:layout_gravity="center_vertical"
                    android:text="sggggggg" />


            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout_row2"
                android:layout_weight="1"
                android:layout_width="match_parent"
                  android:layout_height="0dp"

                android:orientation="horizontal" >

                <Button
                    android:id="@+id/button3"
                    style="?android:attr/buttonStyleSmall"
                    android:layout_height="wrap_content"
                     android:layout_width="0dp"
                   android:layout_weight="1"
                    android:layout_gravity="center_vertical"
                    android:text="s" />

                <Button
                    android:id="@+id/button4"
                    style="?android:attr/buttonStyleSmall"
                    android:layout_height="wrap_content"
                     android:layout_width="0dp"
                   android:layout_weight="1"
                    android:clickable="false"
                     android:layout_gravity="center_vertical"
                    android:text="s" />


            </LinearLayout>


       </LinearLayout>

3

আপনি এখানে:

Button button = new Button(this);
// weight = 1f , gravity = GridLayout.FILL 
GridLayout.LayoutParams param= new GridLayout.LayoutParams(GridLayout.spec(
            GridLayout.UNDEFINED,GridLayout.FILL,1f),
            GridLayout.spec(GridLayout.UNDEFINED,GridLayout.FILL,1f));
// Layout_height = 0 ,Layout_weight = 0
params.height =0;                                                                                                           
params.width = 0;
button.setLayoutParams(param);

1

আমি লেবেলগুলি ডানদিকে প্রান্তিককরণ এবং বাম মানগুলি সারিবদ্ধ করে একটি কেন্দ্রিক টেবিল রাখতে চেয়েছিলাম। অতিরিক্ত স্থানটি টেবিলের চারপাশে থাকা উচিত। অনেক পরীক্ষা-নিরীক্ষার পরেও এবং ডকুমেন্টেশনে যা বলা উচিত তা অনুসরণ না করে, আমি কাজ করে এমন কিছু নিয়ে এসেছি। আমি যা করেছি তা এখানে:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical" >

<GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="2"
    android:orientation="horizontal"
    android:useDefaultMargins="true" >

    <TextView
        android:layout_gravity="right"
        android:text="Short label:" />

    <TextView
        android:id="@+id/start_time"
        android:layout_gravity="left"
        android:text="Long extended value" />

    <TextView
        android:layout_gravity="right"
        android:text="A very long extended label:" />

    <TextView
        android:id="@+id/elapsed_time"
        android:layout_gravity="left"
        android:text="Short value" />
</GridLayout>

এটি কাজ করছে বলে মনে হচ্ছে তবে গ্রিডলাউট বার্তাটি দেখায়:

"এই গ্রিডলআউট লেআউটটি বা এর লিনিয়ারলআউট পিতামাতারা অকেজো"

এটি যখন আমার পক্ষে কাজ করে তখন কেন এটি "অকেজো" হয় তা নিশ্চিত নন।

আমি নিশ্চিত না কেন এটি কাজ করে বা এটি একটি ভাল ধারণা, তবে আপনি যদি এটি চেষ্টা করে থাকেন এবং আরও ভাল ধারণা প্রদান করতে পারেন, ছোট উন্নতি করতে পারেন বা এটি কেন কাজ করে তা ব্যাখ্যা করতে পারেন (বা কাজ করবে না) আমি প্রতিক্রিয়াটির প্রশংসা করব।

ধন্যবাদ।


এটি লেআউট সম্পাদকটিতে দেখতে দুর্দান্ত, তবে এটি যখন চালায় তখন ব্যর্থ হয়। :-(
মিচ

2
"পিতা-মাতা অকেজো" বার্তাটি হ'ল কারণ আপনার মোড়ক_কন্টেন্টের অভ্যন্তরে একটি মোড়ক_কন্টেন্ট রয়েছে এবং আমি যতদূর দেখতে পাচ্ছি এটি সেখানে কেবলমাত্র উপাদান।
বেন উইলকিনসন

1

এটি মোটামুটি পুরানো প্রশ্ন, তবে স্পষ্টতই অনেক লোকের আগ্রহ। এর মতো 4 টি বোতামের সরল বিন্যাসের জন্য, মনে হয় একটি টেবিললআউট হ'ল কাঙ্ক্ষিত ফলাফলটি সম্পাদন করার সহজতম উপায়।

এখানে কয়েকটি উদাহরণ কোড যা তার পিতামাতার প্রস্থে ছড়িয়ে ছয় কলাম সহ একটি টেবিলের প্রথম 2 সারি দেখায়। প্রতিটি ঘরের লিনিয়ারলআউট এবং চিত্রদর্শনটি ঘরের রঙ অব্যাহত থাকার সাথে ঘরের মধ্যে একটি চিত্র "চালু এবং বন্ধ" করার জন্য ব্যবহৃত হয়।

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1,2,3,4,5,6"
    android:background="@drawable/vertical_radio_button_background"
    android:padding="2dp">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/brown"
            android:tag="13"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="1"
            android:background="@color/brown">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/maraschino"
            android:tag="9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="2"
            android:background="@color/maraschino">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/cayenne"
            android:tag="22"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="3"
            android:background="@color/cayenne">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/maroon"
            android:tag="18"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="4"
            android:background="@color/maroon">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/plum"
            android:tag="3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="5"
            android:background="@color/plum">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/eggplant"
            android:tag="15"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="6"
            android:background="@color/eggplant">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/plum2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="1"
            android:background="@color/plum">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/lavender"
            android:tag="14"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="2"
            android:background="@color/lavender">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/carnation"
            android:tag="16"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="3"
            android:background="@color/carnation">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/light_pink"
            android:tag="23"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="4"
            android:background="@color/light_pink">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/strawberry"
            android:tag="10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="5"
            android:background="@color/strawberry">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/magenta"
            android:tag="20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_margin="1dp"
            android:layout_column="6"
            android:background="@color/magenta">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/selected_check"
                android:visibility="invisible"/>
        </LinearLayout>
    </TableRow>
</TableLayout>

1

পুরানো প্রশ্ন, তবে আমার সমাধানটি যুক্ত করতে চেয়েছিল। আমি একটি "লিনিয়ার গ্রিড লেআউট" তৈরি করেছি যা গ্রিডের অনুকরণ করে তবে নেস্টেড লিনিয়ার লেআউটগুলি ব্যবহার করে। এটি স্থান পূরণ করতে প্রসারিত করতে দেয়।

http://zerocredibility.wordpress.com/2014/12/18/linear-grid-layout/


1

আমি আশা করি এটি কারও সাহায্য করবে

ফলাফল

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

কোড:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:grid="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 0x0"
        grid:layout_column="0"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="0"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 0x1"
        grid:layout_column="1"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="0"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 0x2"
        grid:layout_column="2"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="0"
        grid:layout_rowWeight="1" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 1x0"
        grid:layout_column="0"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="1"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 1x1"
        grid:layout_column="1"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="1"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 1x2"
        grid:layout_column="2"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="1"
        grid:layout_rowWeight="1" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 2x0"
        grid:layout_column="0"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="2"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 2x1"
        grid:layout_column="1"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="2"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 2x2"
        grid:layout_column="2"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="2"
        grid:layout_rowWeight="1" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 3x0"
        grid:layout_column="0"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="3"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 3x1"
        grid:layout_column="1"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="3"
        grid:layout_rowWeight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="item 3x2"
        grid:layout_column="2"
        grid:layout_columnWeight="1"
        grid:layout_gravity="center"
        grid:layout_row="3"
        grid:layout_rowWeight="1" />

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

1

ফলাফল :

এখানে চিত্র বর্ণনা লিখুন

এরকম কিছু চেষ্টা করুন:

    final int MAX_COLUMN = gridView.getColumnCount(); //5
    final int MAX_ROW = gridView.getRowCount(); //7
    final int itemsCount = MAX_ROW * MAX_COLUMN; //35

    int row = 0, column = 0;

    for (int i = 0; i < itemsCount; i++) {
        ImageView view = new ImageView(this);

        //Just to provide alternate colors
        if (i % 2 == 0) {
            view.setBackgroundColor(Color.RED);
        } else {
            view.setBackgroundColor(Color.GREEN);
        }

        GridLayout.LayoutParams params = new GridLayout.LayoutParams(GridLayout.spec(row, 1F), GridLayout.spec(column, 1F));
        view.setLayoutParams(params);
        gridView.addView(view);

        column++;

        if (column >= MAX_COLUMN) {
            column = 0;
            row++;
        }
    }

আপনি যদি আপনার কক্ষগুলির জন্য নির্দিষ্ট প্রস্থ এবং উচ্চতা চান তবে ব্যবহার করুন:

     params.width = 100; // Your width
     params.height = 100; //your height

1

এটি বোতাম ছাড়াই অধিক ডিফল্ট অ্যাপ্লিকেশনের কোড, এটি আমার পক্ষে খুব কার্যকর

<GridLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:columnCount="1"
   >
   <TextView
       android:text="2x2 button grid"
       android:textSize="32dip"
       android:layout_gravity="center_horizontal" />

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal">
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Naam" />
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="start"
           android:text="@{viewModel.selectedItem.test2}" />
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
   </LinearLayout>

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       >
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Nummer" />
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="start"
           android:text="@{viewModel.selectedItem.test}" />
       <Space
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1" />
   </LinearLayout>
</GridLayout>

1

আমার একই সমস্যা রয়েছে এবং আমি মনে করি প্রোগ্রামের মাধ্যমে প্রস্থ এবং উচ্চতা নির্ধারণ করেছি:

মেট্রিক্সের সাথে বোতামের প্রস্থ সেট করুন w

 GridLayout gridLayout=findViewById(R.id.grid);
    for (int i = 0; i <gridLayout.getChildCount() ; i++) {
        View view= gridLayout.getChildAt(i);
        if(view instanceof Button){
            Button btn = (Button) view;
            btn.setWidth(200);//metrics.widthPixels / 2
            btn.setHeight(200);//metrics.heightPixels / 7
        }
    } 

0

গ্রিড বিন্যাস

       <GridLayout
        android:layout_width="match_parent"
        android:layout_weight="3"
        android:columnCount="2"
        android:padding="10dp"
        android:rowCount="3"
        android:background="@drawable/background_down"
        android:layout_height="0dp">


        <androidx.cardview.widget.CardView
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="10dp"
            android:elevation="10dp"
            app:cardCornerRadius="15dp"
            >
            <LinearLayout
                android:weightSum="3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >

                <ImageView
                    android:layout_weight="2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="15dp"
                    android:src="@drawable/user" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Users"
                    android:textSize="16sp"
                    android:layout_marginStart="15dp"
                    android:layout_marginLeft="15dp" />
            </LinearLayout>

        </androidx.cardview.widget.CardView>
        <androidx.cardview.widget.CardView
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="10dp"
            android:elevation="10dp"
            app:cardCornerRadius="15dp"
            >
            <LinearLayout
                android:weightSum="3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >

                <ImageView
                    android:layout_weight="2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="15dp"
                    android:src="@drawable/addusers" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Add Users"
                    android:textSize="16sp"
                    android:layout_marginStart="15dp"
                    android:layout_marginLeft="15dp" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <androidx.cardview.widget.CardView
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="10dp"
            android:elevation="10dp"
            app:cardCornerRadius="15dp"
            >
            <LinearLayout
                android:weightSum="3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >

                <ImageView
                    android:layout_weight="2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="15dp"
                    android:src="@drawable/newspaper" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Report"
                    android:textSize="16sp"
                    android:layout_marginStart="15dp"
                    android:layout_marginLeft="15dp" />
            </LinearLayout>



        </androidx.cardview.widget.CardView>
        <androidx.cardview.widget.CardView
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="10dp"
            android:elevation="10dp"
            app:cardCornerRadius="5dp"
            >
            <LinearLayout
                android:weightSum="3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >

                <ImageView
                    android:layout_weight="2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_margin="15dp"
                    android:src="@drawable/settings" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Settings"
                    android:textSize="16sp"
                    android:layout_marginStart="15dp"
                    android:layout_marginLeft="15dp" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

    </GridLayout>

আপনি এখানে পুরো টিউটোরিয়ালগুলি পেতে পারেন, কার্ডভিউ এবং অনআইটেমিক্লিকলিস্টনার সহ অ্যান্ড্রয়েড গ্রিড লেআউট


-2

আমি যা করেছি তা এখানেই এবং আমি খুশি হয়ে বলতে পারি যে এটি আমার জন্য কাজ করেছে। আমিও পুরো স্ক্রিনটি কভার করতে আইটেমগুলির 2x2, 3x3 ইত্যাদি গ্রিড চেয়েছিলাম। গ্রিডলেআউটগুলি স্ক্রিনের প্রস্থের সাথে মিলিত হয় না। লিনিয়ারলআউটগুলি ধরণের কাজ করে তবে আপনি নেস্টেড ওজন ব্যবহার করতে পারবেন না।

আমার জন্য সর্বোত্তম বিকল্পটি ছিল ফ্র্যাগমেন্টগুলি ব্যবহার করা আমি এই টিউটোরিয়ালটি ব্যবহার করে যা করতে চাই তা শুরু করার জন্য used

এখানে কিছু কোড রয়েছে:

যথোপযুক্ত সৃষ্টিকর্তা:

public class GridHolderActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main_6);
    }
}

ক্রিয়াকলাপ_মাইন_6 এক্সএমএল (3 টি টুকরো টুকরো করে)

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/frag1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name=".TwoHorizontalGridFragment"
        tools:layout="@layout/two_horiz" />
    <fragment
        android:id="@+id/frag2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name=".TwoHorizontalGridFragment"
        tools:layout="@layout/two_horiz" />
    <fragment
        android:id="@+id/frag3"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name=".Grid.TwoHorizontalGridFragment"
        tools:layout="@layout/two_horiz" />

বেস টুকরা বিন্যাস

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_gravity="center"
    android:layout_height="match_parent">

    <ImageQueue
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/img1"
        android:layout_weight="1"/>


    <ImageQueue
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/img2"
        android:layout_weight="1"/>
</LinearLayout>

টুকরা ক্লাস (কেবলমাত্র একটি কাস্টম দৃশ্যের সূচনাটি পরিচালনা করে) প্রতি টুকরোটিতে 2 টাইল স্ফীত করে

public class TwoHorizontalGridFragment extends Fragment {
private View rootView;

private ImageQueue imageQueue1;
private ImageQueue imageQueue2;

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    /**
     * Inflate the layout for this fragment
     */
    rootView = inflater.inflate(
            R.layout.two_horiz, container, false);
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    imageQueue1 = (ImageQueue)rootView.findViewById(R.id.img1);
    imageQueue2 = (ImageQueue)rootView.findViewById(R.id.img2);
    imageQueue1.updateFiles();
    imageQueue2.updateFiles();
}

}

এটাই!

মূলত নেস্টেড ওজন ব্যবহার করার পক্ষে এটি একটি অদ্ভুত কাজ। এটি আমাকে একটি নিখুঁত 2x3 গ্রিড দেয় যা আমার 10 ইঞ্চি ট্যাবলেট এবং আমার এইচটিসি ড্রয়েড ডিএনএ উভয়ের পুরো পর্দা পূরণ করে। আমার এটা আপনার জন্য যায় কিভাবে জানি!


1
গ্রিডভিউ / গ্রিডলেআউট ব্যবহার করে অর্জন করা যায় এমন এক সহজ টাকাসমূহের জন্য সম্পূর্ণ জটিল কাঠামোগুলি সহ অনেকগুলি টুকরো টুকরো টুকরো টুকরো টুকরো থাকার কারণে এটি একটি খারাপ দৃষ্টিভঙ্গি।
রায়কুদ

ওপি জানিয়েছে যে কয়েকটি বোতামের জন্য তাদের 2x2 গ্রিডের প্রয়োজন। আপনি ঠিক, এই জটিল উপায়। আরও পাঠ্য, দর্শন এবং অন্যান্য সামগ্রী সহ বিন্যাসগুলির জন্য খণ্ডগুলি হ'ল উপায়। এছাড়াও, লেআউটগুলি সম্পূর্ণ স্থিতিশীল এবং গতিশীলভাবে নির্মিত না হলে এটি কেবল কার্যকর হবে।
নিলসকোট

এখন এআইপি 21-এ গ্রিডলাউটগুলির জন্য আরও সমর্থন রয়েছে, এই পদ্ধতির অতিরিক্ত মূল্য রয়েছে
নলিনস্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.