আমি কীভাবে অ্যান্ড্রয়েডের সীমানা সহ একটি টেবিল তৈরি করতে পারি?


187

আমি টেবিল হিসাবে ডেটা প্রদর্শন করতে একটি টেবিল বিন্যাস ব্যবহার করি তবে আমি ব্যবহারকারী-সংজ্ঞায়িত কলাম এবং সীমানা সহ সারিগুলির একটি টেবিল চাই। পরামর্শ?

উত্তর:


198

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

একটি উদাহরণ:

অঙ্কনযোগ্য / cell_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape= "rectangle"  >
        <solid android:color="#000"/>
        <stroke android:width="1dp"  android:color="#ff9"/>
</shape>

বিন্যাস / my_table.xml

<?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">

    <TableRow
        android:id="@+id/tabla_cabecera"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></TableRow>

    <TableLayout
        android:id="@+id/tabla_cuerpo"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/cell_shape"
                android:padding="5dp"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceMedium"></TextView>

        </TableRow>
    </TableLayout>


</LinearLayout>

সম্পাদনা: একটি উদাহরণ

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

সম্পাদনা 2: অন্য একটি উদাহরণ (আরও উপাদান সহ: বৃত্ত কোণে, গ্রেডিয়েন্টগুলি ...) এখানে চিত্র বর্ণনা লিখুন

আমি এই সমস্যাটি আরও বিশদে http://blog.inte Fightnia.com/2012/02/programacion-movil-en-android.html#more তে ব্যাখ্যা করেছি । এটি স্প্যানিশ ভাষায় রয়েছে তবে আরও কয়েকটি জটিল টেবিলের কিছু কোড এবং চিত্র রয়েছে।


6
আমি
লিখিত

1
আমি কীভাবে প্রোগ্রামটির সাথে দৃশ্যের ব্যাকগ্রাউন্ড সেট করব? view.setBackground(?)
rasen58

1
এটি দেখার জন্য, কেবল ਤਬলা_ক্যাবেসেরা
ymerdrengene

1
এটি সীমানাগুলি কমপক্ষে 2px পুরু প্রদর্শিত হবে যা 1px প্রস্থের সীমানার মতো সুন্দর নয়।
অ্যান্ড্রয়েডদেভ

1
হ্যাঁ, আমি যেমন ব্যাখ্যা করেছি এটি একমাত্র অসুবিধা, তবে যদি আপনার টেবিলটি পুরো স্ক্রিনটি পূরণ করে আপনি নীচে এবং বাম সীমানা 1px এ সেট করতে পারেন (উদাহরণস্বরূপ) এবং আপনি 1 টেক্সার সীমানা সহ একটি টেবিল পাবেন will
ডেভিড জেসি

56

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

ড্রয়েডনোভা-র অনুরূপ উদাহরণ:

<TableLayout android:background="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
  <TableRow android:background="#FFFFFF"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_margin="1dp">
     ...
  </TableRow>
</TableLayout>

1
এখানে ইচ্ছাকৃত ওভারড্রো ইস্যু থেকে সাবধান থাকুন, টেবিলটি বড় হলে এটি ইউআইতে ঝাঁকুনি / হট্টগোলের কারণ হতে পারে।
ভিকি চিজওয়ানি

কীভাবে আমি বস্তুটিতে প্রোগ্রাম_রূপে বিন্যাস_মার্গিন সেট করতে পারি TableRow?
জেমস ওয়েয়ারজবা

এটি কেবল টেবিল এবং এর সারিগুলির চারদিকে রূপরেখা যুক্ত করেছে তবে কলামগুলির মধ্যে নয়
user924

41

যদি আপনি সারিগুলির মধ্যে কেবল একটি লাইন রাখার চেষ্টা করছেন (উদাহরণস্বরূপ, একটি "মোট" সারির ঠিক উপরে) তবে একটি সহজ সমাধান পাওয়া যায় - কেবল একটি পটভূমির রঙ এবং একটি নির্দিষ্ট বিন্যাস_এই উচ্চতা সহ একটি টেবিলরো যুক্ত করুন:

<TableRow android:layout_height="1px" android:background="#BDBDBD">
   <TextView android:layout_span="2" android:layout_height="1px" 
             android:layout_width="fill_parent" android:text="">
   </TextView>
</TableRow>

সেট করুন android:layout_height="1px"বা পুরু আপনি সীমানা হতে চান। আপনার বাকী টেবিলের সাথে ম্যাচ করার জন্য যতগুলি খালি টেক্সটভিউ কলামগুলি পূরণ করুন বা কেবল তার সাথে একটি ব্যবহার করুনandroid:layout_span আমি যেভাবে দেখিয়েছি তা ব্যবহার করুন।

আউটপুটটি এরকম কিছু দেখবে:

সারণী সীমান্ত প্রদর্শিত

আপনি যদি আরও জটিল সীমানা যুক্ত করার চেষ্টা করছেন তবে ইতিমধ্যে পোস্ট করা অন্যান্য উত্তরগুলি আরও উপযুক্ত।


কেন TextViewআপনি একটি Viewপরিবর্তে ব্যবহার করতে পারেন যখন ? এছাড়াও সঠিক পিক্সেল নির্দিষ্ট করা ভাল অনুশীলন নয়। পরিবর্তে dp / sp ব্যবহার করুন। এই থ্রেডটিও দেখুন: stackoverflow.com/questions/2025282/…
স্টিফান

প্রতিক্রিয়াটির জন্য ধন্যবাদ ... আমি মনে করি পাঠ্যদর্শনটি ব্যবহার করার কোনও কারণ নেই - এটি কেবল একটি উদাহরণ ছিল। দ্বিতীয়ত, আমি ডিপি / এসপি সম্পর্কে ভুল বোঝাবুঝি না করলে (প্রায় সম্ভবত, যেহেতু আমি কেবল প্রায় এক সপ্তাহ ধরে অ্যান্ড্রয়েডে বিকাশ করছি) আমি পিক্স ব্যবহার করি কারণ আমি কেবল আমার সারিগুলির মধ্যে একটি গ্যারান্টিযুক্ত -১-পিক্সেল লাইন চাই, তা যাই হোক না কেন রেজোলিউশন বা পর্দার আকার আমি ব্যবহার করছি। আমি খুব পাতলা রেখা পছন্দ করি। অন্যান্য ব্যবহারকারীর বিভিন্ন স্বাদ থাকতে পারে এবং অন্যান্য ইউনিট ব্যবহার করতে পারে।
মাইকেল ব্রে

হ্যাঁ তবে আপনি কি খুব পাতলা লাইন পছন্দ করেন! - যে বলেছে যে সহজ সরল সমাধানটি আমার ভোট পেয়েছে
gheese

26

আমি যা চেয়েছিলাম তা এই জাতীয় টেবিল

উল্লম্ব বিভাজক সহ টেবিল চিত্র

আমি এটি আমার স্টাইলগুলিতে যোগ করেছি x এক্সএমএল :

      <style name="Divider">
        <item name="android:layout_width">1dip</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:background">@color/divider_color</item>
    </style>

    <style name="Divider_invisible">
        <item name="android:layout_width">1dip</item>
        <item name="android:layout_height">match_parent</item>
    </style>

তারপরে আমার টেবিল বিন্যাসে :

 <TableLayout
            android:id="@+id/table"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:stretchColumns="*" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:background="#92C94A" >

                <TextView
                    android:id="@+id/textView11"
                    android:paddingBottom="10dp"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:paddingTop="10dp" />

                <LinearLayout
                    android:layout_width="1dp"
                    android:layout_height="match_parent" >

                    <View style="@style/Divider_invisible" />
                </LinearLayout>

                <TextView
                    android:id="@+id/textView12"
                    android:paddingBottom="10dp"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:paddingTop="10dp"
                    android:text="@string/main_wo_colon"
                    android:textColor="@color/white"
                    android:textSize="16sp" />

                <LinearLayout
                    android:layout_width="1dp"
                    android:layout_height="match_parent" >

                    <View style="@style/Divider" />
                </LinearLayout>

                <TextView
                    android:id="@+id/textView13"
                    android:paddingBottom="10dp"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:paddingTop="10dp"
                    android:text="@string/side_wo_colon"
                    android:textColor="@color/white"
                    android:textSize="16sp" />

                <LinearLayout
                    android:layout_width="1dp"
                    android:layout_height="match_parent" >

                    <View style="@style/Divider" />
                </LinearLayout>

                <TextView
                    android:id="@+id/textView14"
                    android:paddingBottom="10dp"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:paddingTop="10dp"
                    android:text="@string/total"
                    android:textColor="@color/white"
                    android:textSize="16sp" />
            </TableRow>

            <!-- display this button in 3rd column via layout_column(zero based) -->

            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#6F9C33" >

                <TextView
                    android:id="@+id/textView21"
                    android:padding="5dp"
                    android:text="@string/servings"
                    android:textColor="@color/white"
                    android:textSize="16sp" />

                <LinearLayout
                    android:layout_width="1dp"
                    android:layout_height="match_parent" >

                    <View style="@style/Divider" />
                </LinearLayout>

..........
.......
......

22

আপনি এক্সএমএল এর পরিবর্তে প্রগতিগতভাবে এটিও করতে পারেন, তবে এটি আরও কিছুটা "হ্যাকিশ"। তবে কোনও ব্যক্তিকে কোনও বিকল্প দিন এবং আপনি তাকে কোনও পছন্দ ছাড়েন না: পি .. এখানে কোডটি রয়েছে:

TableLayout table = new TableLayout(this);
TableRow tr = new TableRow(this);
tr.setBackgroundColor(Color.BLACK);
tr.setPadding(0, 0, 0, 2); //Border between rows

TableRow.LayoutParams llp = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
llp.setMargins(0, 0, 2, 0);//2px right-margin

//New Cell
LinearLayout cell = new LinearLayout(this);
cell.setBackgroundColor(Color.WHITE);
cell.setLayoutParams(llp);//2px border on the right for the cell


TextView tv = new TextView(this);
tv.setText("Some Text");
tv.setPadding(0, 0, 4, 3);

cell.addView(tv);
tr.addView(cell);
//add as many cells you want to a row, using the same approach

table.addView(tr);

14

জাভা কোড না লিখে এবং সাথে অন্য কোনও এক্সএমএল লেআউট তৈরি না করে প্রতিটি কক্ষের চারপাশে 1 ডিপি ধসের সীমানা তৈরি করতে <shape...> ট্যাগ করতে, আপনি এই সমাধানটি চেষ্টা করতে পারেন:

ইন <TableLayout...>অ্যাড android:background="#CCC"এবং android:paddingTop="1dp"এবংandroid:stretchColumns="0"

ইন <TableRow...>অ্যাড android:background="#CCC"এবং android:paddingBottom="1dp"এবংandroid:paddingRight="1dp"

টেবিলরোতে প্রতিটি ঘর / সন্তানের মধ্যে, যেমন <TextView...>অ্যাড android:background="#FFF"এবংandroid:layout_marginLeft="1dp"

প্যাডিংস এবং মার্জিনগুলি বর্ণিত হিসাবে অনুসরণ করা খুব গুরুত্বপূর্ণ। এই দ্রবণটি (এক্স) এইচটিএমএল / সিএসএসে 1 ডিপি সীমান্ত-ওরফে সীমানা-পতন সম্পত্তি আঁকবে।

মধ্যে পটভূমির রঙ <TableLayout...>এবং <TableRow...>একটি সীমানা লাইনের রঙ এবং ব্যাকগ্রাউন্ডে প্রতিনিধিত্ব করে<TextView...> ভর্তি একটি টেবিল কক্ষ। প্রয়োজনে কোষে কিছু প্যাডিং রাখতে পারেন।

একটি উদাহরণ এখানে:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#CCC"
    android:paddingTop="1dp"
    android:stretchColumns="0"
    android:id="@+id/tlTable01">

    <TableRow
        android:background="#CCC"
        android:paddingBottom="1dp"
        android:paddingRight="1dp">
        <TextView 
            android:layout_marginLeft="1dp"
            android:padding="5dp"
            android:background="#FFF"
            android:text="Item1"/>
        <TextView 
            android:layout_marginLeft="1dp"
            android:padding="5dp"
            android:background="#FFF"
            android:gravity="right"
            android:text="123456"/>
    </TableRow>
    <TableRow
        android:background="#CCC"
        android:paddingBottom="1dp"
        android:paddingRight="1dp">
        <TextView 
            android:layout_marginLeft="1dp"
            android:padding="5dp"
            android:background="#FFF"
            android:text="Item2"/>
        <TextView 
            android:layout_marginLeft="1dp"
            android:padding="5dp"
            android:background="#FFF"
            android:gravity="right"
            android:text="456789"/>
    </TableRow>
</TableLayout>

ফ্যান্টাস্টিক! ধন্যবাদ!
superodde

এটি ভাল, তবে আপনি যখন ডার্ক মোড ব্যবহার করতে চান তখন একটি সমস্যা হয়। কারণ সাদা সীমানা রাখতে আপনাকে টেবিলরো ব্যাকগ্রাউন্ড = সাদা রাখতে হবে। এবং এখন যখন আপনার দ্বিতীয় পাঠ্যদর্শনটি প্রথম পাঠ্যদর্শনটির চেয়ে দীর্ঘ (উচ্চতর) হবে আপনার প্রথম পাঠ্যদর্শনটির পিছনে সাদা ব্যাকগ্রাউন্ড থাকবে। প্রথম টেক্সটভিউয়ের জন্য অন্ধকারে ব্যাকগ্রাউন্ড সেট করা সাহায্য করবে না কারণ এটি সম্পূর্ণ দর্শনটি কভার করবে না।
উইক্টর কালিনোভস্কি

1
এটিই আমি খুঁজছিলাম ... ধন্যবাদ এছাড়াও উইকোটারক্যালিনোভস্কি যা বলেছেন তা অন্ধকার মোডের জন্যও সত্য, আমাদের হাতছাড়া হয়ে খেলতে হবে।
হাই টেন

14

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

এখানে আমি নিম্নলিখিত নকশা ইমেজ দ্বারা তালিকা ডিজাইন করেছেন। আমার লিস্টিটেম ফাইলের নামটি প্রোপার্টিলিস্টেম.এক্সএমএল এবং সেলবর্ডার.এক্সএমএল এক্সএক্সএমএল সেলবার্ড আউটপুট জন্য অঙ্কনীয় আকার ব্যবহার করা হয়, এই চিত্রটিতে প্রদর্শিত হয়। প্রয়োজনীয় কোড আমি এখানে যুক্ত।

ফাইলের নাম: propertylistitem.xml

<TableLayout... >
            <TableRow... >
                 <TextView ...
                    android:background="@drawable/cellborder"
                    android:text="Amount"/>
            </TableRow>

            <TableRow... >
                <TextView...
                    android:background="@drawable/cellborder"
                    android:text="5000"/>
            </TableRow>
        </TableLayout>

ফাইলের নাম: সেলবর্ডার.এক্সএমএল এখানে আমি কেবল আমার ডিজাইনে কেবল সীমানা চাই, তাই আমি দৃ color় রঙের ট্যাগটি লিখি।

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <!--     <solid android:color="#dc6888"/>     -->
        <stroke android:width="0.1dp" android:color="#ffffff"
            />
        <padding android:left="0dp" android:top="0dp"
                android:right="0dp" android:bottom="0dp" />
    </shape>

8

দীর্ঘ অনুসন্ধান এবং ঘন্টা চেষ্টা করার পরেও আমি এটি তৈরি করতে পারি সবচেয়ে সহজ কোড:

ShapeDrawable border = new ShapeDrawable(new RectShape());
border.getPaint().setStyle(Style.STROKE);
border.getPaint().setColor(Color.BLACK);
tv.setBackground(border);
content.addView(tv);

টিভি হ'ল একটি পাঠ্যদর্শন যা একটি সাধারণ পাঠ্য এবং সামগ্রী আমার পাত্রে (এই ক্ষেত্রে লিনিয়ারলআউট)। এটা একটু সহজ।


API এর
lvl

setBackgroundDrawable()পরিবর্তে ব্যবহার করা যেতে পারে।
কোরি উ

8

ভাল এটি আপনাকে অনুপ্রেরণা জাগাতে পারে এই পদক্ষেপগুলি কীভাবে গতিবেগের সাথে সীমানা সারণী তৈরি করবেন তা দেখায়

এখানে টেবিল দেখুন

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/nested_scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none"
    android:scrollingCache="true">
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/simpleTableLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="45dp"
        android:layout_marginRight="45dp"
        android:stretchColumns="*"
        >
    </TableLayout>
</android.support.v4.widget.NestedScrollView>

এবং এখানে "attrib_row.xML" ব্যবহার করার জন্য সারি রয়েছে

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/border"
    >
    <TextView
        android:id="@+id/attrib_name"
        android:textStyle="bold"
        android:height="30dp"
        android:background="@drawable/border"
        android:gravity="center"
        />
    <TextView
        android:id="@+id/attrib_value"
        android:gravity="center"
        android:height="30dp"
        android:textStyle="bold"
        android:background="@drawable/border"
        />
</TableRow>

এবং আমরা আমাদের টেবিল "সীমানা.এক্সএমএল" তে সীমানা যুক্ত করতে অঙ্কনযোগ্য এই এক্সএমএল ফাইলটি যুক্ত করতে পারি

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape= "rectangle">
    <solid android:color="@color/colorAccent"/>
    <stroke android:width="1dp" android:color="#000000"/>
</shape>

এবং শেষ অবধি এখানে কোটলিনে লেখা কমপ্যাক্ট কোডটি রয়েছে তবে আপনার প্রয়োজন হলে এটি জাভাতে রূপান্তর করা সহজ

ওয়েল টেম্পসগুলি একটি অ্যারের তালিকায় ডেটা থাকে: ArrayList<Double>()

fun CreateTable()
{
    val temps=controller?.getTemps()
    val rowHead = LayoutInflater.from(context).inflate(R.layout.attrib_row, null) as TableRow
    (rowHead.findViewById<View>(R.id.attrib_name) as TextView).text=("time")
    (rowHead.findViewById<View>(R.id.attrib_value) as TextView).text=("Value")
    table!!.addView(rowHead)
    for (i in 0 until temps!!.size) {

        val row = LayoutInflater.from(context).inflate(R.layout.attrib_row, null) as TableRow
        (row.findViewById<View>(R.id.attrib_name) as TextView).text=((i+1).toString())
        (row.findViewById<View>(R.id.attrib_value) as TextView).text=(temps[i].toString())
        table!!.addView(row)
    }
    table!!.requestLayout()
}

এবং আপনি এটি আপনার খণ্ডে উদাহরণস্বরূপ এটি ব্যবহার করতে পারেন

   override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        table = view?.findViewById<View>(R.id.simpleTableLayout) as TableLayout
        CreateTable()
    }

চূড়ান্ত ফলাফলটি দেখে মনে হচ্ছে এখানে চিত্র বর্ণনা লিখুন


5

কীভাবে অনড্র পদ্ধতিতে ওভাররাইডিং এবং তারপরে ক্যানভাসে লাইনগুলি আঁকতে হবে?

for(int i = 0; i < rows; i++)
    {
        canvas.drawLine(0, i * m_cellHeight, m_totalWidth, i * m_cellHeight, paint);
    }
    for(int i = 0; i < m_columns; i++){
        canvas.drawLine(i* m_cellWidth, 0, i * m_cellWidth, m_cellHeight * rows, paint);
    }

3

আমি এই সমাধানটি ব্যবহার করেছি: ইন TableRow, আমি LinearLayoutউল্লম্ব লাইন এবং এতে প্রকৃত ঘর সহ প্রতিটি কক্ষের জন্য তৈরি করেছি এবং প্রতিটির পরেTableRow আমি একটি অনুভূমিক রেখা যুক্ত করেছি।

নীচের কোডটি দেখুন:

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:shrinkColumns="1">

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

            <LinearLayout 
                android:orientation="horizontal"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <TextView 
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:gravity="center"/>

            </LinearLayout>

            <LinearLayout 
                android:orientation="horizontal"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <View
                    android:layout_height="match_parent"
                    android:layout_width="1dp"
                    android:background="#BDCAD2"/>

                <TextView 
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:gravity="center"/>

            </LinearLayout>
      </TableRow>

      <View
        android:layout_height="1dip"
        android:background="#BDCAD2" />

      <!-- More TableRows -->
</TableLayout>

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


এটি সারির নীচে একটি লাইন যুক্ত করার জন্য একটি সহজ পদ্ধতির।
Mark.ewd

3

এখানে এই সমস্যাটি সমাধানের দুর্দান্ত উপায়:

এর মতো বৃত্তাকার কোণগুলির সাথে অঙ্কনযোগ্য একটি আয়তক্ষেত্র তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <stroke android:width="2dp"
            android:color="#888888"/> 

    <corners android:bottomRightRadius="6dp" 
             android:bottomLeftRadius="6dp" 
             android:topLeftRadius="6dp" 
             android:topRightRadius="6dp"/> 
</shape>

গোলাকার_বর্ডার.এক্সএমএল নামের সহ এটি অঙ্কনযোগ্য ফোল্ডারে সংরক্ষণ করুন

তারপরে একটি আপেক্ষিক লেআউট তৈরি করুন যা বৃত্তাকার_সীমাটি এর মতো ব্যাকগ্রাউন্ড হিসাবে ব্যবহার করে:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@drawable/rounded_border">
   <ListView 
       android:id="@+id/list_view"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"/>

</RelativeLayout>

এটি আপনার লেআউট ফোল্ডারে সংরক্ষণ করুন এবং এর নাম টেবিল_উথ_বোর্ডার.এক্সএমএল করুন

তারপরে যখনই আপনার এই জাতীয় কোনও টেবিলের প্রয়োজন হয় তখন এটির মতো অন্তর্ভুক্ত বাক্য গঠন ব্যবহার করে একটি দৃশ্যে টানুন:

<include
        android:id="@+id/rounded_table"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/table_with_border" />

আপনি সম্ভবত প্রান্তগুলির চারপাশে কিছু ব্যবধান যুক্ত করতে চাইবেন - সুতরাং কেবল একটি লিনিয়ারলআউটে অন্তর্ভুক্তটি लपेटুন এবং প্রান্তগুলির চারপাশে কিছু প্যাডিং যুক্ত করুন।

কোনও টেবিলের চারপাশে একটি সুন্দর সীমানা পাওয়ার সহজ এবং সহজ উপায়।


2

স্ট্রোকটি মিডেল বিভাগগুলিতে দ্বিগুণ হয়ে যায়, আমি এই স্তর তালিকাটি আকর্ষণীয় ব্যবহার করেছি:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

 <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">

     <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
       <solid android:color="@color/grey" />
    </shape>
</item>

<item android:top="1dp" android:left="1dp" android:bottom="1dp" android:right="1dp">

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
      <solid android:color="@color/lightgrey" />
    </shape>
 </item>
</layer-list>

2

আমি মনে করি 1px নয়-প্যাচ চিত্র তৈরি করা ভাল, এবং টেবিলরো এবং টেবিললআউটে শো-ডিভিডার বৈশিষ্ট্যটি ব্যবহার করা যেহেতু তারা উভয়ই লিনিয়ারলআউটগুলি


আপনি এটির উপর একটি সহজ উদাহরণ দিতে পারেন?
হোসেইন শাহদুস্ট

2

উপরের উত্তরে কক্ষগুলির মধ্যে একটি সীমানা দ্বিগুণ হয়। সুতরাং, আপনি এই সমাধান চেষ্টা করতে পারেন:

<item
    android:left="-1dp"
    android:top="-1dp">

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:shape="rectangle">
        <solid android:color="#fff"/>
        <stroke
            android:width="1dp"
            android:color="#ccc"/>
    </shape>
</item>


2

আর একটি সমাধান হ'ল লিনিয়ার লেআউটগুলি ব্যবহার করা এবং সারি এবং কক্ষগুলির মধ্যে ডিভাইডারগুলি সেট করুন:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<View
    android:layout_width="match_parent"
    android:layout_height="1px"
    android:background="#8000"/>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        ></LinearLayout>

    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></LinearLayout>

    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>

</LinearLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1px"
    android:background="#8000"/>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        ></LinearLayout>

    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></LinearLayout>
    <View
        android:layout_width="@dimen/border"
        android:layout_height="match_parent"
        android:background="#8000"
        android:layout_marginTop="1px"
        android:layout_marginBottom="1px"/>
</LinearLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1px"
    android:background="#8000"/>
</LinearLayout>

এটি একটি নোংরা সমাধান, তবে এটি সহজ এবং স্বচ্ছ পটভূমি এবং সীমানা নিয়েও কাজ করে।


2

আমি জানি এটি একটি পুরানো প্রশ্ন ... যাইহোক ... আপনি যদি আপনার এক্সএমএলকে সুন্দর এবং সাধারণ রাখতে চান তবে আপনি টেবিল লেআউটটি প্রসারিত করতে এবং কিছু কাস্টম অঙ্কন করতে ওভাররাইড প্রেরণড্রে করতে পারেন।

এখানে একটি দ্রুত এবং নোংরা বাস্তবায়ন যা টেবিল দৃশ্যের পাশাপাশি অনুভূমিক এবং উল্লম্ব বারগুলির চারপাশে একটি আয়তক্ষেত্র আঁকে:

public class TableLayoutEx extends TableLayout {
    private Paint linePaint = null;
    private Rect tableLayoutRect;

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

    public TableLayoutEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        float strokeWidth = this.getContext().getResources().getDisplayMetrics().scaledDensity * 1;
        linePaint = new Paint(0);
        linePaint.setColor(0xff555555);
        linePaint.setStrokeWidth(strokeWidth);
        linePaint.setStyle(Paint.Style.STROKE);

        Rect rect = new Rect();           
        int paddingTop= getPaddingTop();

        this.getDrawingRect(rect);
        tableLayoutRect = new Rect(rect.left, rect.top + paddingTop, rect.right, rect.bottom);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);

        Rect rect = new Rect();

        if (linePaint != null) {
            canvas.drawRect(tableLayoutRect, linePaint);
            float y = tableLayoutRect.top;
            for (int i = 0; i < getChildCount() - 1; i++) {
                if (getChildAt(i) instanceof TableRow) {
                    TableRow tableRow = (TableRow) getChildAt(i);
                    tableRow.getDrawingRect(rect);
                    y += rect.height();
                    canvas.drawLine(tableLayoutRect.left, y, tableLayoutRect.right, y, linePaint);
                    float x = tableLayoutRect.left;
                    for (int j = 0; j < tableRow.getChildCount() - 1; j++) {
                        View view = tableRow.getChildAt(j);
                        if (view != null) {
                            view.getDrawingRect(rect);
                            x += rect.width();
                            canvas.drawLine(x, tableLayoutRect.top, x, tableLayoutRect.bottom, linePaint);
                        }
                    }
                }
            }
        }
    }
}

তৃতীয় কলামটি মোড়ানো পাঠের সাথে এক্সএমএল উদাহরণ:

<com.YOURPACKAGE.TableLayoutEx
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:shrinkColumns="2"
    android:paddingTop="6dp">

    <TableRow>
        <TextView
            android:text="@string/my_text_0_0"
            android:padding="@dimen/my_padding"/>
        <TextView
            android:text="@string/my_text_0_1"
            android:padding="@dimen/my_padding"/>
        <TextView                   
            android:text="@string/my_text_0_2_to_wrap"
            android:padding="@dimen/my_padding"/>
    </TableRow>

    <!--more table rows here-->

</com.YOURPACKAGE.TableLayoutEx>

2

আপনার যদি সীমান্তের সাথে টেবিলের প্রয়োজন হয় তবে আমি টেবিললআউটটির পরিবর্তে ওজন সহ রৈখিক বিন্যাসের পরামর্শ দিই।

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:gravity="center"
    android:padding="7dp"
    android:background="@drawable/border"
    android:textColor="@android:color/white"
    android:text="PRODUCT"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@android:color/black"
    android:paddingStart="1dp"
    android:paddingEnd="1dp"
    android:paddingBottom="1dp"
    android:baselineAligned="false">

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp">

        <TextView
            android:id="@+id/chainprod"
            android:textSize="15sp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/pdct"/>

    </LinearLayout>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:id="@+id/chainthick"
            android:textSize="15sp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/thcns"/>

    </LinearLayout>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:id="@+id/chainsize"
            android:textSize="15sp"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/size" />
    </LinearLayout>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:textSize="15sp"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/sqft" />
    </LinearLayout>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@android:color/black"
    android:paddingStart="1dp"
    android:paddingEnd="1dp"
    android:paddingBottom="1dp"
    android:baselineAligned="false">

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp">

        <TextView
            android:id="@+id/viewchainprod"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/pdct" />

    </LinearLayout>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:id="@+id/viewchainthick"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/thcns"/>
    </LinearLayout>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:id="@+id/viewchainsize"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/size"/>
    </LinearLayout>
    <LinearLayout
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="0dp"
        android:layout_marginStart="1dp">

        <TextView
            android:id="@+id/viewchainsqft"
            android:textSize="15sp"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@android:color/white"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="@string/sqft"/>

    </LinearLayout>
</LinearLayout>

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

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