এক্সএমএল অঙ্কনযোগ্য ব্যবহার করে উল্লম্ব লাইন


162

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

একটি অনুভূমিক তৈরি করতে, এটি বেশ সোজা:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
    <stroke android:width="1dp" android:color="#0000FF"/>
    <size android:height="50dp" />     
</shape>

প্রশ্ন হল, এই লাইনটি উল্লম্বভাবে কীভাবে করা যায়?

হ্যাঁ, কার্যকারিতা রয়েছে যেমন আয়তক্ষেত্র আকার 1px পুরু আঁকানো, তবে এটি অঙ্কনযোগ্য এক্সএমএলকে জটিল করে তোলে, যদি এতে একাধিক <item>উপাদান থাকে।

এর সাথে কারও কোন সুযোগ ছিল?

হালনাগাদ

মামলা এখনও নিষ্পত্তিহীন। তবে, অ্যান্ড্রয়েড ডকুমেন্টেশন ক্রুসেডের যে কোনও ব্যক্তির জন্য - আপনি এটি দরকারী খুঁজে পেতে পারেন: অ্যান্ড্রয়েড এক্সএমএল ম্যানুয়াল অনুপস্থিত

হালনাগাদ

আমি যেটিকে সঠিক হিসাবে চিহ্নিত করেছি তার ব্যতীত অন্য কোনও উপায় আমি খুঁজে পাইনি। এটি কৌশলটি কিছুটা "ভারী" মনে হলেও এটি করে, যদি আপনি উত্তরটি জানেন তবে ভাগ করে নিতে ভুলবেন না;)

উত্তর:


394

কোনও আকারের পরিবর্তে, আপনি এটি ব্যবহার করতে পারেন View:

<View
    android:layout_width="1dp"
    android:layout_height="fill_parent"
    android:background="#FF0000FF" />

আমি এটি কেবল অনুভূমিক রেখাগুলির জন্যই ব্যবহার করেছি তবে আমার মনে হয় এটি উল্লম্ব রেখাগুলির জন্যও কাজ করবে।

ব্যবহার করুন:

<View
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:background="#FF0000FF" />

অনুভূমিক রেখার জন্য।


4
ধন্যবাদ মার্ক :)! আমি সচেতন আমি এটি অর্জন করতে একটি দৃষ্টিভঙ্গি ব্যবহার করতে পারি। জিনিসটি হ'ল আমি আরও জটিল জটিল ভিড় জমা করছি যা আমি একটি সারণী ঘরের পটভূমির জন্য অঙ্কনযোগ্য হিসাবে ব্যবহার করতে চাই। বিভিন্ন ধরণের আকার / গ্রেডিয়েন্টস / লাইন রয়েছে। একটি দৃষ্টিভঙ্গি ব্যবহার করে সমাধান হওয়া উচিত, তবে আমাকে এটিকে অন্য একটি অঙ্কন "স্তর" এ রাখতে হবে এবং আমি যখন পুনরায় আকার পরিবর্তন করবো তখন আমি নিজেই পায়ে গুলি চালাচ্ছি I আমি আশ্চর্য হয়েছি কেন কেন সেখানে কোনও নথি নেই? " আকৃতি "xmls, গুগল থেকে কেউ আমাদের আলোকিত করতে পারে? :)
কাসপা

1
মার্জেনরাইট / স্টার্ট এবং বাম / শেষ ব্যবহার কখনও কখনও পক্ষগুলিতে স্থান পেতে আকর্ষণীয়।
জর্জ

108

আপনি কোনও ঘোরানো ট্যাগের মধ্যে নিজের আকারটি বাসাতে পারেন।

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90">
    <shape 
        android:shape="line">
        <stroke
            android:width="1dp"
            android:color="#ff00ff"
            android:dashWidth="1dp"
            android:dashGap="2dp" />
    </shape>
</rotate>

তবে একমাত্র সমস্যা হ'ল আপনার লেআউট এক্সএমএলে সংজ্ঞায়িত লেআউট প্যারামগুলি হ'ল আসল আকৃতিটি আঁকতে ব্যবহৃত মাত্রা হবে be মানে আপনি যদি আপনার লাইনটি 30dp লম্বা করতে চান তবে আপনাকে আপনার লেআউট এক্সএমএল 30dp এর একটি বিন্যাস_পরিধি সংজ্ঞায়িত করতে হবে। তবে চূড়ান্ত প্রস্থও সেই ক্ষেত্রে 30 ডিপি হবে, যা বেশিরভাগ পরিস্থিতিতে সম্ভবত অনাকাঙ্ক্ষিত। এর মূল অর্থ হ'ল প্রস্থ এবং উচ্চতা উভয়ই একই মান হতে হবে, রেখার জন্য আপনার পছন্দসই দৈর্ঘ্যের মান। আমি কীভাবে এটি ঠিক করব তা বুঝতে পারি না।

এটি "অ্যান্ড্রয়েড ওয়ে" সমাধান বলে মনে হচ্ছে, তবে আমি যে মাত্রা ইস্যুটির উল্লেখ করেছি তার জন্য কিছু স্থির বা কার্যকর সমাধান না করা থাকলে সম্ভবত এটি সম্ভবত বেশিরভাগ মানুষের পক্ষে কার্যকর হবে না। আমাদের আসলে যা প্রয়োজন তা হ'ল <আকৃতি /> বা <স্ট্রোক /> এর একটি ওরিয়েন্টেশন অ্যাট্রিবিউট।

আপনি ঘোরানো ট্যাগের বৈশিষ্ট্যগুলিতে আরও একটি অঙ্কনযোগ্য উল্লেখ করার চেষ্টা করতে পারেন, যেমন:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:toDegrees="90"
    android:drawable="@drawable/horizontal_line" />

তবে আমি এটি পরীক্ষা করে দেখিনি এবং এটি একই সমস্যা হওয়ার আশা করি।

- সম্পাদনা -

ওহ, আমি আসলে একটি স্থির করেছি। অনাকাঙ্ক্ষিত অতিরিক্ত স্থান থেকে মুক্তি পেতে আপনি আপনার লেআউট এক্সএমএলে নেতিবাচক মার্জিন ব্যবহার করতে পারেন। যেমন:

<ImageView
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_marginLeft="-15dp"
    android:layout_marginRight="-15dp"
    android:src="@drawable/dashed_vertical_line" />

4
নেতিবাচক মার্জিনটি 99% ডিভাইসের জন্য কাজ করবে .... কেবলমাত্র জানেন, এমন কিছু ডিভাইস রয়েছে যা যদি আপনি এটি করেন তবে বন্ধ করতে বাধ্য করা হবে। কিছু ডিভাইসগুলির একটি নেতিবাচক মার্জিন স্ফীত করতে সমস্যা হয়
ক্যান্ট অ্যান্ডারসন

2
@ এসফাস আমি আপনার প্রথম কোডটি ব্যবহার করি তবে আমার উপরে দেখার লাইনের প্রয়োজন। এটি আমার দৃষ্টিভঙ্গির কেন্দ্রস্থলে। আমি কীভাবে এর জন্য মহাকর্ষ সেট করতে পারি (শেপ এক্সএমএল ফাইলের অভ্যন্তরে)?
বেহজাদ

20

আপনি ঘোরানো বৈশিষ্ট্যটি ব্যবহার করতে পারেন

 <item>
    <rotate
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%" >
        <shape
            android:shape="line"
            android:top="1dip" >
            <stroke
                android:width="1dip"
                 />
        </shape>
    </rotate>
</item>

6
এটি অবশ্যই একটি আরও ভাল (বা সেরা) উত্তর কারণ @ কমন্সওয়্যারের উত্তর স্বাভাবিক উল্লম্ব লাইনের জন্য যথেষ্ট। আমরা যদি ড্যাশযুক্ত লাইন তৈরি করতে না চাই (উদাহরণস্বরূপ বলি), এটিই কেবলমাত্র উত্তর যা সঠিকভাবে কাজ করবে।
সুবিন সেবাস্তিয়ান

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

আমার জন্য কাজ কর . এটিকে ফিলিপ পিতামাতার বা ডিপি উচ্চতায় স্থির আকারের পটভূমির হিসাবে রাখুন


11

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

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/divider_color" />
    <item android:left="6dp" android:drawable="@color/background_color" />
</layer-list>

আমার বাম, ডান, নীচে সীমানাগুলির সাথে পটভূমি প্রয়োজন এবং এটি আমার জন্য কাজ করেছে, ধন্যবাদ!
আন্দ্রি চেরেনকো

দুর্দান্ত, এর সাথে আমি আমার লিনিয়ারলআউট ( showDividers="middle") এ ঝরঝরে ডিভাইডার তৈরি করতে সক্ষম হয়েছি । একটি 2 ডিপি বিভাজক পেতে, আমার android:left="3dp"এখানে উল্লেখ করা দরকার ।
জোনিক

টিপ: এটিকে আরও সাধারণভাবে কার্যকর @android:color/transparentকরার জন্য হার্ডকডিংয়ের পরিবর্তে ব্যবহার করুন @color/background_color
জোনিক

আসলে আমার উল্লম্ব বিভাজকের প্রয়োজনের জন্য, এই সমাধানটি আরও সহজ । :)
জোনিক

@ জোনিক শিওর, তবে এটি কেবল স্থির উচ্চতার সাথে কাজ করে, এর সাথে নয় wrap_content
এরিক কোক

10

আমি মনে করি এটি সহজ সমাধান:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:gravity="center">
        <shape android:shape="rectangle">
            <size android:width="1dp" />
            <solid android:color="#0000FF" />
        </shape>
    </item>

</layer-list>

ওয়ান্ডারফুল। android:heightআপনি sizeযদি সেই মাত্রাটিও নিয়ন্ত্রণ করতে চান তবে যুক্ত করুন ।
জিউলিও পিয়ানোস্টেল্লি

4

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

public class NoteTextView extends TextView {
    public NoteTextView(Context context) {
       super(context);
    }
    private Paint paint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.parseColor("#F00000FF"));
        paint.setStrokeWidth(0);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawLine(0, 0, 0, getHeight(), paint);
    }
}

আমার বাম দিকে একটি উল্লম্ব রেখা প্রয়োজন, তবে অঙ্কনের পরামিতিগুলি drawLine(startX, startY, stopX, stopY, paint)যাতে আপনি দৃশ্য জুড়ে যে কোনও দিকে কোনও সরল রেখা আঁকতে পারেন। তারপরে আমার ক্রিয়াকলাপে আমি NoteTextView note = new NoteTextView(this); আশা করি এটি সাহায্য করবে।


3

এটি খুব সহজ ... অ্যান্ড্রয়েড এক্সএমএলে একটি উল্লম্ব লাইন যুক্ত করতে ...

<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:rotation="90"
android:background="@android:color/darker_gray"/>

আপনি যখন উচ্চতার জন্য ফিল_প্যারেন্টটি ব্যবহার করতে না পারেন তখন এটি দুর্দান্ত কাজ করে কারণ পিতামাতার উচ্চতাটি মোড়কে_ কনটেন্টে সেট করা আছে।
সের্গেই আলদৌখভ

2

নির্ভর করে, যেখানে আপনি উল্লম্ব রেখা রাখতে চান, তবে আপনি উদাহরণস্বরূপ একটি উল্লম্ব সীমানা চাইলে আপনার প্যারেন্ট ভিউটির ব্যাকগ্রাউন্ড কাস্টম আঁকতে সক্ষম হতে পারে। এবং তারপরে আপনি এর মতো অঙ্কনীয়কে সংজ্ঞায়িত করতে পারেন:

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

        </shape>
    </item>

    <item android:right="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#00ffffff" />
        </shape>
    </item>

</layer-list>

এই উদাহরণটি ভিউয়ের ডানদিকে 1dp পাতলা কালো লাইন তৈরি করবে, এটি একটি পটভূমি হিসাবে এটি আঁকতে সক্ষম হবে।


2
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="-3dp"
        android:left="-3dp"
        android:top="-3dp">

        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
            <stroke
                android:width="2dp"
                android:color="#1fc78c" />
        </shape>

    </item>

</layer-list>

2

দেখে মনে হচ্ছে কেউ এই বিকল্পটি উল্লেখ করেছে:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@color/white" android:width="1dp"/>
</layer-list>

1

আপনি কোনও আকার ব্যবহার করতে পারেন তবে একটি রেখার পরিবর্তে এটি আয়তক্ষেত্র তৈরি করুন।

android:shape="rectangle">
<stroke
    android:width="5dp"
    android:color="#ff000000"
    android:dashGap="10px"
    android:dashWidth="30px" />

এবং আপনার বিন্যাসে এটি ব্যবহার করুন ...

<ImageView
    android:layout_width="7dp"
    android:layout_height="match_parent"
    android:src="@drawable/dashline"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layerType="software"/>

এটিকে একক লাইনে আনার জন্য আপনাকে ড্যাশগুলির আকারের উপর নির্ভর করে প্রস্থের সাথে খেলতে হবে।

আশা করি এটি চিয়ার্সকে সহায়তা করবে


1
add this in your styles.xml

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

then wrap this style in a linear layout where you want the vertical line, I used the vertical line as a column divider in my table. 

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

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

0

একটি উল্লম্ব রেখা তৈরি করতে, 1dp প্রস্থ সহ কেবল একটি আয়তক্ষেত্র ব্যবহার করুন:

<shape>
    <size
        android:width="1dp"
        android:height="16dp" />
    <solid
        android:color="#c8cdd2" />
</shape>

ব্যবহার করবেন না stroke, ব্যবহার solid(যা "ভরাট" রঙ) লাইনের রঙ উল্লেখ করতে।


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