क्षैतिज रेखीय लयआउट के लिए (ऊर्ध्वाधर) विभक्त कैसे जोड़ें?


92

मैं एक क्षैतिज रैखिक लेआउट में एक विभक्त जोड़ने की कोशिश कर रहा हूँ, लेकिन कहीं नहीं मिल रहा है। विभक्त बस नहीं दिखाता है। मैं एंड्रॉइड के साथ कुल नौसिखिया हूं।

यह मेरा लेआउट XML है:

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/llTopBar"
        android:orientation="horizontal"
        android:divider="#00ff00"
        android:dividerPadding="22dip"
        android:showDividers="middle"
       >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf" />
            <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf"
             />

    </LinearLayout>

</RelativeLayout>

आप इसे किस Android पर चला रहे हैं? setDividerDrawable केवल एपीआई 11 के बाद से अस्तित्व में है
एलेक्स

जेली बीन 4.2 एपी 17
अहमद-अनस

यदि आपने सब कुछ करने की कोशिश की है, तो सुनिश्चित करें कि रैखिकअरआउट में सही अभिविन्यास है। एक क्षैतिज अभिविन्यास के साथ विभक्त के लिए एक ऊंचाई सेट करना बहुत भ्रामक होगा।
नीनो वैन हुफ

1
मत भूलो SHOWDIVIDERS आइटम !!!!!!
फेटी

जवाबों:


217

क्षैतिज विभक्त के लिए इसका उपयोग करें

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/honeycombish_blue" />

और यह ऊर्ध्वाधर विभक्त के लिए

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/honeycombish_blue" />

या यदि आप क्षैतिज विभक्त के लिए रैखिकलेयूट विभक्त का उपयोग कर सकते हैं

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:height="1dp"/>
    <solid android:color="#f6f6f6"/>
</shape>

और लीनियर लयआउट में

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

अगर आप वर्टिकल डिवाइडर बनाना चाहते हैं तो android:height="1dp"शेप यूज के स्थान परandroid:width="1dp"

युक्ति: क्या भूल नहींandroid:showDividers मद।


3
धन्यवाद। लेकिन मैं इसे "एंड्रॉइड: डिवाइडर" विशेषता में कैसे जोड़ूंगा? मूल रूप से, मेरा मतलब है कि प्रत्येक तत्व के बीच विभक्त को जोड़ने के लिए किसी तरह का स्वचालित तरीका है? मेरा मतलब यह नहीं है कि क्यों Android: विभक्त विशेषता है?
अहमद-अनस

@ death_relic0 Android: विभक्त सूची दृश्य, विस्तार योग्य सूची और टैबविगेट के लिए एविल है
पद्म कुमार

9
धन्यवाद, लेकिन यह यहाँ क्यों है: s developer.android.com/reference/android/widget/…
अहमद-अनस

ऐसा लगता है कि आपको किसी भी उपयोग योग्य, रंग का उपयोग नहीं करना चाहिए
डेमाकसी

7
लगता है कि आप अपने layout_widthऔर layout_heightमूल्यों मिला: क्षैतिज के लिए layout_widthहोना चाहिए "fill_parent"और layout_heightहोना चाहिए "1dp"। ऊर्ध्वाधर डिवाइडर के लिए समान रूप से स्वैप किया जाना चाहिए।
जय सिदरी

69

इसे आज़माएँ, res/drawableफ़ोल्डर में एक विभक्त बनाएँ:

vertical_divider_1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
    <size android:width="1dip" />
    <solid android:color="#666666" />    
</shape> 

और dividerइस तरह LinearLayout में विशेषता का उपयोग करें:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:orientation="horizontal"
    android:divider="@drawable/vertical_divider_1"
    android:dividerPadding="12dip"
    android:showDividers="middle"
    android:background="#ffffff" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

नोट: android:divider केवल एंड्रॉइड 3.0 (एपीआई स्तर 11) या उच्चतर में उपलब्ध है।


लेकिन यह सिर्फ एक विभक्त जोड़ देगा .. मान लीजिए मुझे 10 तत्व पसंद हैं, प्रत्येक तत्व के बीच विभक्त के लिए अतिरिक्त कोड जोड़ना एक बेकार लगता है
अहमद-अनस

@ death_relic0 आप डिवाइडर के लिए एक अलग लेआउट क्यों नहीं बनाते हैं और फिर इसे कहीं भी जोड़ने के लिए शामिल टैग का उपयोग करें और जैसा आप चाहते हैं। मुझे लगता है कि यह मेरे लिए बेहतर होगा और बेकार नहीं होगा।
GrIsHu

39

डिवाइडर को लेआउट में जोड़ना आसान है, हमें एक अलग दृश्य की आवश्यकता नहीं है।

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:divider="?android:listDivider"
    android:dividerPadding="2.5dp"
    android:orientation="horizontal"
    android:showDividers="middle"
    android:weightSum="2" ></LinearLayout>

उपरोक्त कोड के लिए लंबवत विभक्त बनाते हैं LinearLayout


मैं हमेशा शो डिवाइडर विशेषता को भूल जाता हूं। धन्यवाद!
अनजानेरेडो

1
टिप का उपयोग करने के लिए धन्यवाद? Android: listDivider। मैंने अभी देखा है कि यह एपीआई 21 या उच्चतर में अदृश्य है। निचले एपीआई संस्करणों में एक छोटी ग्रे लाइन दिखाई जाती है
user114676

@KetanMehta हम इसे 'एंड्रॉइड: डिवाइडर' विशेषता के साथ परिभाषित करेंगे, यह ड्रॉबल या रंग है।
khaintt

क्या android: विभक्त समर्थन API 15 +?
RoCk RoCk

16

अद्यतन: AppCompat का उपयोग कर पूर्व छत्ते

यदि आप AppCompat पुस्तकालय v7 का उपयोग कर रहे हैं तो आप उपयोग करना चाह सकते हैं LinearLayoutCompat दृश्य । इस दृष्टिकोण का उपयोग करके आप Android 2.1, 2.2 और 2.3 पर ड्रॉबल डिवाइडर का उपयोग कर सकते हैं।

उदाहरण कोड:

<android.support.v7.widget.LinearLayoutCompat
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:showDividers="middle"
        app:divider="@drawable/divider">

drawable / divider.xml: विभक्त। (ऊपर और नीचे कुछ गद्दी के साथ विभक्त)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetBottom="2dp"
        android:insetTop="2dp">
    <shape>
        <size android:width="1dp" />
        <solid android:color="#FFCCCCCC" />
    </shape>
</inset>

बहुत महत्वपूर्ण नोट:LinearLayoutCompat दृश्य का विस्तार नहीं करता है LinearLayoutऔर वजह आप उपयोग नहीं करना चाहिए android:showDividersया android:dividerगुण लेकिन कस्टम: app:showDividersऔर app:divider। कोड में आप भी LinearLayoutCompat.LayoutParamsनहीं का उपयोग करना चाहिए LinearLayout.LayoutParams!


क्या यह डिवाइडर में वर्टिकल पैडिंग जोड़ने का एकमात्र तरीका है?
SARose

1
@ नहीं, आप हमेशा एक कस्टम दृश्य बना सकते हैं या मौजूदा दृश्य घटकों में हैक कर सकते हैं। हालांकि यह करने के लिए डिफ़ॉल्ट और पसंदीदा तरीका है।
रॉल्फ

8

मैं आज उसी समस्या में भाग गया। जैसा कि पिछले उत्तर इंगित करते हैं, समस्या डिवाइडर के बजाय डिवाइडर टैग में एक रंग के उपयोग से उपजी है। हालांकि, मैं अपनी खुद की ड्रा करने योग्य xml लिखने के बजाय, संभव के रूप में थीम्ड विशेषताओं का उपयोग करना पसंद करता हूं। आप एंड्रॉइड का उपयोग कर सकते हैं: attr / डिवाइडर क्षैतिज और एंड्रॉइड: attr / डिवाइडरविटिकल इसके बजाय एक पूर्वनिर्धारित ड्रॉएबल प्राप्त करने के लिए:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showDividers="middle"
    android:divider="?android:attr/dividerVertical"
    android:orientation="horizontal">
    <!-- other views -->
</LinearLayout>

एपीआई 11 और इसके बाद के संस्करण में उपलब्ध हैं।

इसके अलावा, जैसा कि उनके उत्तर में bocekm द्वारा उल्लेख किया गया है, डिवाइडरपैडिंग संपत्ति ऊर्ध्वाधर डिवाइडर के दोनों तरफ अतिरिक्त पैडिंग नहीं जोड़ती है, जैसा कि कोई भी मान सकता है। इसके बजाय यह ऊपर और नीचे की गद्दी को परिभाषित करता है और इस प्रकार यदि यह बहुत बड़ा है तो डिवाइडर को अलग कर सकता है।


6

आप अंतर्निहित डिवाइडर का उपयोग कर सकते हैं, यह दोनों झुकावों के लिए काम करेगा।

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:divider="?android:attr/listDivider"
  android:orientation="horizontal"
  android:showDividers="middle">

3

निराशा की बात है, आपको अपनी गतिविधि में कोड से डिवाइडर दिखाने में सक्षम होना चाहिए। उदाहरण के लिए:

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

    // Set the view to your layout
    setContentView(R.layout.yourlayout);

    // Find the LinearLayout within and enable the divider
    ((LinearLayout)v.findViewById(R.id.llTopBar)).
        setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

}

हालाँकि यह ऐसा करने का एक और तरीका है, इसकी कोई आवश्यकता नहीं है।
रिकार्डो ए

2

हो सकता है कि आपका डिवाइडर बहुत अधिक डिवाइडरपैडिंग के कारण प्रदर्शित न हो रहा हो। आप 22dip सेट करते हैं, इसका मतलब है कि डिवाइडर को ऊपर से 22dip और नीचे से 22dip द्वारा विभाजित किया गया है। यदि आपकी लेआउट ऊंचाई 44dip से कम या बराबर है, तो कोई भी डिवाइडर दिखाई नहीं देता है।


1

अगर कपिल वत्स का जवाब का काम नहीं कर रहा है तो कुछ इस तरह से कोशिश करें:

drawable / divider_horizontal_green_22.xml

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

    <size android:width="22dip"/>
    <solid android:color="#00ff00"/>

</shape>

लेआउट / your_layout.xml

LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/llTopBar"
            android:orientation="horizontal"
            android:divider="@drawable/divider_horizontal_green_22"
            android:showDividers="middle"
           >

मुझे एक समस्या का सामना करना पड़ा जहाँ पेडिंग विशेषता काम नहीं कर रही थी, इस प्रकार मुझे डिवाइडर की ऊँचाई को सीधे डिवाइडर में सेट करना पड़ा।

ध्यान दें:

यदि आप इसे वर्टिकल लिनेरलआउट में उपयोग करना चाहते हैं, तो एक नया बनाएं, इस तरह: ड्रॉबल / डिवाइडर_वर्टिकल_ग्रीन_22.xml

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

    <size android:height="22dip"/>
    <solid android:color="#00ff00"/>

</shape>

0

तैयार होने के लिए, डिवाइडर की LinearLayoutऊंचाई कुछ होनी चाहिए ColorDrawable( जबकि अनिवार्य #00ff00रूप से और साथ ही किसी अन्य हार्डकोड रंग में) नहीं है। इसे हल करने के लिए सरल (और सही) तरीका है, अपने रंग को Drawableपूर्वनिर्धारित ऊंचाई के साथ कुछ में लपेटना , जैसे कि shapeखींचने योग्य


-1

आपको टेक्स्टव्यू या इमेजव्यू जैसे विभाजक के लिए कोई भी दृश्य बनाना होगा, उसके लिए पृष्ठभूमि सेट करें यदि आपके पास छवि है तो पृष्ठभूमि के रूप में रंग का उपयोग करें।

आशा है कि यह आपकी मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.