গ্রিডলাউট এবং সারি / কলাম স্প্যান ওও


121

অ্যান্ড্রয়েড ডেভেলপারগণ ব্লগ পোস্ট উপস্থাপকGridLayout দেখায় কিভাবে ধারন স্বয়ংক্রিয় সূচক বরাদ্দ প্রভাব এই চিত্রটি:

স্বয়ংক্রিয় সূচক বরাদ্দ

আমি আসলে এটি ব্যবহার করে বাস্তবায়ন করার চেষ্টা করছি GridLayout। আমার এখন পর্যন্ত যা আছে তা এখানে:

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    app:orientation="horizontal"
    app:columnCount="8">

    <Button
        app:layout_columnSpan="2"
        app:layout_rowSpan="2"
        android:layout_gravity="fill_horizontal"
        android:text="@string/string_1"/>

  <Button
    app:layout_columnSpan="2"
    android:layout_gravity="fill_horizontal"
    android:text="@string/string_2"/>

  <Button
    app:layout_rowSpan="4"
    android:text="@string/string_3"/>

  <Button
    app:layout_columnSpan="3"
    app:layout_rowSpan="2"
    android:layout_gravity="fill_horizontal"
    android:text="@string/string_4"/>

  <Button
    app:layout_columnSpan="3"
    android:layout_gravity="fill_horizontal"
    android:text="@string/string_5"/>

  <Button
    app:layout_columnSpan="2"
    android:layout_gravity="fill_horizontal"
    android:text="@string/string_6"/>

  <android.support.v7.widget.Space
    app:layout_column="0"
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

  <android.support.v7.widget.Space
    android:layout_width="36dp"
    />

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

<Space>প্রতিটি কলামের ন্যূনতম প্রস্থ ছিল তা নিশ্চিত করার জন্য আমাকে উপাদানগুলি প্রবর্তন করতে হয়েছিল , অন্যথায়, আমার কাছে শূন্য প্রস্থের কলামগুলির একটি গুচ্ছ থাকবে।

যাইহোক, এমনকি তাদের সাথে, আমি এটি পেয়েছি:

নমুনা গ্রিডলআউট

লক্ষণীয়ভাবে:

  • সত্ত্বেও android:layout_gravity="fill_horizontal", কলাম ধারন সঙ্গে আমার উইজেট দৃশ্যও কলাম পূরণ না

  • android:layout_rowSpanমান সত্ত্বেও , কিছুই সারি ছড়িয়ে দেয় না

কেউ কি ব্লগ পোস্ট থেকে ডায়াগ্রামটি পুনরুত্পাদন করতে পারেন GridLayout?

ধন্যবাদ!


178
এমনকি আপনি প্রশ্ন জিজ্ঞাসা করেছেন বলেও আমি অনুমান করি :)
স্ট্যাকওভার

উত্তর:


76

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

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnCount="9"
android:orientation="horizontal"
android:rowCount="8" >

<Button
    android:layout_columnSpan="2"
    android:layout_gravity="fill"
    android:layout_rowSpan="2"
    android:text="1" />

<Button
    android:layout_columnSpan="2"
    android:layout_gravity="fill_horizontal"
    android:text="2" />

<Button
    android:layout_gravity="fill_vertical"
    android:layout_rowSpan="4"
    android:text="3" />

<Button
    android:layout_columnSpan="3"
    android:layout_gravity="fill"
    android:layout_rowSpan="2"
    android:text="4" />

<Button
    android:layout_columnSpan="3"
    android:layout_gravity="fill_horizontal"
    android:text="5" />

<Button
    android:layout_columnSpan="2"
    android:layout_gravity="fill_horizontal"
    android:text="6" />

<Space
    android:layout_width="36dp"
    android:layout_column="0"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="1"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="2"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="3"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="4"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="5"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="6"
    android:layout_row="7" />

<Space
    android:layout_width="36dp"
    android:layout_column="7"
    android:layout_row="7" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="0" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="1" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="2" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="3" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="4" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="5" />

<Space
    android:layout_height="36dp"
    android:layout_column="8"
    android:layout_row="6" />

</GridLayout>

স্ক্রিনশট


7
ঠিক আছে, আইএমএইচও যা তারিখের সাথে উপস্থাপিত অন্যান্য সমাধানের তুলনায় ক্রমান্বয়ে কম হ্যাকি - কমপক্ষে এখানে, হার্ড-ওয়্যার্ড মাপগুলির Spaceউপাদান রয়েছে। আমি ভবিষ্যতের পাঠকদের জন্য একটি স্ক্রিনশট যুক্ত করেছি। ধন্যবাদ!
কমন্সওয়্যার

rowCount8 এ সেট কেন ? আমাদের ৪ টি সারি (বৃহত্তম আকার rowSpan) এর চেয়ে অতিরিক্ত অতিরিক্ত Spaceহওয়া উচিত 5. এছাড়াও আমি কী অনুপস্থিত?
কৌতূহলীচিজেন

আমি আসল প্রশ্নের (যা নিজেই কোনও অ্যান্ড্রয়েড ডেভ ব্লগ পোস্ট থেকে এসেছে) ছবিটি থেকে সারি এবং কলামের গণনা নিয়ে গিয়েছিলাম। তারপরে আমি বাইরের সীমান্ত স্পেসগুলির জন্য জায়গা তৈরি করতে সারি এবং কলামের সংখ্যাগুলিতে 1 যুক্ত করেছিলাম। এটি ঠিক 5 টি সারি দিয়েও কাজ করতে হবে।
kturney

5
আমি দেখতে পাচ্ছি যে এই সমাধানটি কেবল তার <Gridlayout>বিপরীতে কাজ করে<android.support.v7.widget.GridLayout>
দিদিয়া

আমি কীভাবে ডায়নামিকভাবে সারি_স্প্যান এবং কলাম স্প্যান সেট করতে পারি ... এটি কাজ করবে?

17
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:columnCount="8"
        android:rowCount="7" >

        <TextView
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:layout_columnSpan="2"
            android:layout_rowSpan="2"
            android:background="#a30000"
            android:gravity="center"
            android:text="1"
            android:textColor="@android:color/white"
            android:textSize="20dip" />

        <TextView
            android:layout_width="50dip"
            android:layout_height="25dip"
            android:layout_columnSpan="2"
            android:layout_rowSpan="1"
            android:background="#0c00a3"
            android:gravity="center"
            android:text="2"
            android:textColor="@android:color/white"
            android:textSize="20dip" />

        <TextView
            android:layout_width="25dip"
            android:layout_height="100dip"
            android:layout_columnSpan="1"
            android:layout_rowSpan="4"
            android:background="#00a313"
            android:gravity="center"
            android:text="3"
            android:textColor="@android:color/white"
            android:textSize="20dip" />

        <TextView
            android:layout_width="75dip"
            android:layout_height="50dip"
            android:layout_columnSpan="3"
            android:layout_rowSpan="2"
            android:background="#a29100"
            android:gravity="center"
            android:text="4"
            android:textColor="@android:color/white"
            android:textSize="20dip" />

        <TextView
            android:layout_width="75dip"
            android:layout_height="25dip"
            android:layout_columnSpan="3"
            android:layout_rowSpan="1"
            android:background="#a500ab"
            android:gravity="center"
            android:text="5"
            android:textColor="@android:color/white"
            android:textSize="20dip" />

        <TextView
            android:layout_width="50dip"
            android:layout_height="25dip"
            android:layout_columnSpan="2"
            android:layout_rowSpan="1"
            android:background="#00a9ab"
            android:gravity="center"
            android:text="6"
            android:textColor="@android:color/white"
            android:textSize="20dip" />
    </GridLayout>

</RelativeLayout>

স্ক্রিনশট


2
ধন্যবাদ! মজার বিষয় হ'ল আমি যদি GridLayoutঅ্যান্ড্রয়েড সমর্থন প্যাকেজ থেকে স্যুইচ করি তবে লেআউটটি ভেঙে যায় এবং সুপারিশ করে যে দুটিই পুরোপুরি সামঞ্জস্যপূর্ণ নয়। এছাড়াও, আমি সত্যিই আশা করছি যে এটি করার একটি উপায় আছে যা উইজেটগুলির হার্ড-ওয়্যারিং মাপগুলিকে জড়িত না। আমি এই রোলটি কিছুটা সময়ের জন্য রেখে দেব, অন্যান্য উত্তর (কী (যদি থাকে)) কী আসে আসে তা দেখতে, তবে আরও ভাল কিছু না দেখলে আমি আপনার গ্রহণ করব। আবার ধন্যবাদ!
কমন্সওয়্যার

4
"যদি আমি অ্যান্ড্রয়েড সমর্থন প্যাকেজ থেকে গ্রিডলাউটটিতে স্যুইচ করি তবে লেআউটটি ভেঙে যায়" - আসলে, এটি আমার ত্রুটি ছিল , ব্যাকপোর্টের এক্সএমএল নেমস্পেস ব্যবহার করে প্রয়োজনীয় android:বৈশিষ্ট্যগুলিকে পরিবর্তিত করা হয়নি app:। এটি ব্যাকপোর্টের সাথে কাজ করে।
কমন্সওয়্যার

আমি তাদের কয়েকটিকে গতিশীল আকারের একটি উপায় খুঁজে পেয়েছি তবে কলাম বা সারিগুলির সম্পূর্ণ প্রস্থ ইতিমধ্যে সংলগ্ন দৃশ্যের দ্বারা সংজ্ঞায়িত করা থাকলে এটি কেবলমাত্র। আমি মনে করি না যে তারা ওজনের মতো কাজ করে এবং সংজ্ঞায়িত স্প্যানগুলির উপর নির্ভর করে স্থানটি সমানভাবে বিতরণ করে। এটি নিখুঁত নয় তবে আমার বর্তমান প্রকল্পে আমার যা প্রয়োজন তা পুরোপুরি কাজ করে works
হ্যান্ডলার এক্সপ্লয়েট

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

@ বনডাক্স এই বাস্তবায়ন গ্রিড আইটেমটি উচ্চতা, প্রস্থ, কলামের প্রস্থ এবং কলাম স্প্যানগুলিতে স্পষ্টভাবে সংজ্ঞায়িত করে। যখন গ্রিডের (স্ক্রিনের প্রস্থ) বিভিন্ন প্রস্থকে সংজ্ঞায়িত করা হয় তখন গ্রিড বিন্যাস আপনার গ্রিড আইটেমগুলিকে সীমিত জায়গার মধ্যে ভাসিয়ে তুলবে। এটি ছিল একটি প্রকল্পের জন্য প্রয়োজনীয়তা এবং এটি সমস্যার পুরোপুরি সমাধান করেছে।
হ্যান্ডলার এক্সপ্লয়েট

6

আপনার কলামগুলিতে আপনাকে লেআউট_গ্র্যাভিটি এবং লেআউট_ক্লামেন্টওয়েট উভয়ই সেট করতে হবে

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView android:text="سوم شخص"
        app:layout_gravity="fill_horizontal"
        app:layout_columnWeight="1"
        />

    <TextView android:text="دوم شخص"
        app:layout_gravity="fill_horizontal"
        app:layout_columnWeight="1"
        />

    <TextView android:text="اول شخص"
        app:layout_gravity="fill_horizontal"
        app:layout_columnWeight="1"
        />
 </android.support.v7.widget.GridLayout>

2

অ্যান্ড্রয়েড সাপোর্ট ভি G গ্রিডলআউট লাইব্রেরি ওজনের নীতিমালা সমন্বিত করে অতিরিক্ত স্থান বিতরণকে সহজ করে তোলে। কলাম প্রসারিত করতে, নিশ্চিত করুন যে এর অভ্যন্তরের উপাদানগুলি ওজন বা মহাকর্ষের সংজ্ঞা দেয়। কোনও কলামকে প্রসারিত হতে আটকাতে, কলামের উপাদানগুলির মধ্যে একটির ওজন বা মাধ্যাকর্ষণ সংজ্ঞায়িত না করা হয়েছে তা নিশ্চিত করুন। এই গ্রন্থাগারের জন্য নির্ভরতা যুক্ত মনে রাখবেন। যোগ com.android.support:gridlayout-v7:25.0.1 build.gradle হবে।

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

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:gravity="center"
    android:text="First"
    app:layout_columnWeight="1"
    app:layout_rowWeight="1" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:gravity="center"
    android:text="Second"
    app:layout_columnWeight="1"
    app:layout_rowWeight="1" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:gravity="center"
    android:text="Third"
    app:layout_columnWeight="1"
    app:layout_rowWeight="1" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:gravity="center"        
    app:layout_columnWeight="1"
    app:layout_rowWeight="1"
    android:text="fourth"/>

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

1

এপিআই 21 থেকে শুরু করে গ্রিডলাউট এখন লিনিয়ারলআউটের মতো ওজনকে সমর্থন করে। বিস্তারিত জানার জন্য নীচের লিঙ্কটি দেখুন:

https://stackoverflow.com/a/31089200/1296944

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