ओपन-साइडेड एंड्रॉइड स्ट्रोक?


94

क्या केवल कुछ पक्षों पर स्ट्रोक के साथ एंड्रॉइड आकार की वस्तु बनाना संभव है?

जैसे मेरे पास है:

<stroke 
 android:width="3dip" 
 android:color="#000000"
    android:dashWidth="10dip" 
    android:dashGap="6dip" />

जो इस सीएसएस के समान है:

border: 3px dashed black;

मैं केवल एक तरफ स्ट्रोक कैसे सेट कर सकता हूं? यह है कि मैं इसे सीएसएस में कैसे करूंगा:

border-left: 3px dashed black;

Android XML में आप यह कैसे करते हैं?

जवाबों:


127

मैंने इस एक के साथ एक अच्छा समाधान हासिल किया:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
    <item android:top="-1dp" android:right="-1dp" android:left="-1dp">
      <shape>
            <solid android:color="@android:color/transparent" />
            <stroke android:width="1dp" android:color="#ffffff" />
      </shape>
    </item>

</layer-list>

यदि आपको पारदर्शी पृष्ठभूमि की आवश्यकता है तो यह अच्छी तरह से काम करता है लेकिन फिर भी एक खुला स्ट्रोक रंग (मेरे मामले में मुझे केवल एक निचली पंक्ति की आवश्यकता थी)। यदि आपको एक पृष्ठभूमि रंग की आवश्यकता है, तो आप एक ठोस आकार का रंग जोड़ सकते हैं जैसा कि Maragues उत्तर में है।

EDIT 1

कभी-कभी, उच्च घनत्व वाले उपकरणों के लिए, कम डुबकी मूल्यों का उपयोग करके बहुत पतले या अदृश्य स्ट्रोक या दूरियां हो सकती हैं। यह आपके लिए भी हो सकता है जब ListView डिवाइडर सेट करते हैं।

सबसे सरल वर्कअराउंड 1dp के बजाय 1px की दूरी का उपयोग करना है। यह लाइन को सभी घनत्वों पर हमेशा दिखाई देगा। प्रत्येक उपकरण के लिए सबसे अच्छा आकार प्राप्त करने के लिए, प्रत्येक घनत्व के लिए आयाम संसाधन बनाने के लिए सबसे अच्छा समाधान होगा।

संपादित करें २

मज़ा, लेकिन मैंने 6 साल बाद इस का उपयोग करने की कोशिश की और मुझे लॉलीपॉप उपकरणों पर अच्छा परिणाम नहीं मिला।

संभवतः वर्तमान समाधान 9-पैच का उपयोग करना है। एंड्रॉइड को इस समय के बाद इस समस्या का आसान समाधान करना चाहिए था।


यह मेरे लिए भी काम करता है, लेकिन मुझे नहीं पता कि मुझे -1dp के बजाय -2dp का उपयोग क्यों करना पड़ा। यदि मैंने बाद का उपयोग किया, तो मैं अभी भी एक पतली रेखा देख सकता था।
इडू ज़मोरा

1
@EduZamora हाँ, ऐसा लगता है कि उच्च घनत्व वाले उपकरणों के लिए -1dp अपेक्षित रूप से काम नहीं करता है
htafoya

मुझे भी सभी पक्षों के लिए सीमा मिल रही है, लेकिन नीचे केवल सीमा नहीं।
चोक यान चेंग जूल

@YanChengCHEOK 1dp के बजाय 1px के साथ प्रयास करें।
htafoya

@htafoya यह एक शानदार समाधान है। धन्यवाद!
7'13

52

मुझे पता है कि यह प्रश्न बहुत पहले पोस्ट किया गया था, इसलिए उत्तर का उपयोग उस व्यक्ति द्वारा नहीं किया जाएगा जिसने इस प्रश्न को पोस्ट किया है, लेकिन यह अभी भी दूसरों की मदद कर सकता है।

 <?xml version="1.0" encoding="UTF-8"?>
    <!-- inset is used to remove border from top, it can remove border from any other side-->
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetTop="-2dp"
        >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle">
        <stroke android:width="1dp" android:color="#b7b7b7" />
        <corners android:bottomRightRadius="5dp"  android:bottomLeftRadius="5dp"/>

        <solid android:color="#454444"/>
    </shape>
    </inset>

insetटैग का उपयोग करें और उस साइड बॉर्डर के लिए एक नकारात्मक मान दें जिसे आप निकालना चाहते हैं।

संभावित मूल्य हैं:

android:insetTop="-1dp" android:insetBottom="-1dp" android:insetLeft="-1dp" android:insetRight="-1dp"


हाँ और जो मैंने किया वह मत करो और कोशिश करो और बाकी उत्तर पढ़े बिना इनसेट अटर को स्ट्रोक टैग में डाल दो! (जवाब के लिए धन्यवाद BTW ओपी। परफेक्ट सॉल्यूशन)
किरण

सुरुचिपूर्ण! मुझे यह समाधान पसंद है
हाओ क्यूई

41

मैंने एक सूची-परत का उपयोग करके इसे हल किया, दो आकृतियों को मिलाकर, जिनमें से एक की ऊंचाई 1dp के साथ सबसे नीचे रखी गई

optionscreen_bottomrectangle.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
<item>
      <shape>
            <solid android:color="#535353" />
      </shape>
</item>
<!-- This is the main color -->
<item android:bottom="1dp">
     <shape>
           <solid android:color="#252525" />
     </shape>
</item>
</layer-list>

फिर, लेआउट / main.xml फ़ाइल में

<TextView
    android:id="@+id/bottom_rectangle"
    android:background="@drawable/optionscreen_bottomrectangle"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_below="@id/table_options"
    android:layout_above="@id/exit_bar"/>

जो एक पृष्ठभूमि के साथ table_options और exit_bar के बीच की खाई को भरता है और इससे पहले कि exit_bar एक 1dp लाइन प्रिंट करता है। यह मेरे लिए चाल है, मुझे आशा है कि यह किसी और की मदद करता है।

सही क्रम में परतों को रखने के लिए संपादित उत्तर। एलेक्स एलेक्स!


यदि आप वास्तव में स्वयं उत्तर चाहते हैं तो उत्तर देना संभव नहीं है। जब अन्य देवता देखते हैं कि पहले से ही एक उत्तर है (इस मामले में पूरी तरह से यह वास्तव में गैर है) तो वे जवाब देने के लिए इच्छुक नहीं हैं।
१५:३५ पर MrSnowflake

31

इसके बजाय पैडिंग का उपयोग कर अन्य प्रतिक्रियाएं लेते हैं। यह छोटा सा स्निपलेट ऊपर और नीचे एक सीमा बनाता है।

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- This is the line -->
    <item>
          <shape>
                <padding android:left="0dp" android:top="1dp" android:right="0dp" android:bottom="1dp"/>
                <solid android:color="#898989" />
          </shape>
    </item>
    <!-- This is the main color -->
    <item>
         <shape>
             <solid android:color="#ffffff" />
         </shape>
    </item>
</layer-list>

4
यदि आपको गोल कोनों की आवश्यकता है तो यह सबसे अच्छा उत्तर है।
मैककिनले स्मिथ

इसने भी मेरी काफी मदद की। कृपया इसे आजमाएं और आगे बढ़ें
बॉय

@ug_ मुझे लगता है कि यह सबसे अच्छा तरीका है। पूरी तरह से काम करता है, धन्यवाद
ललित शर्मा

काम करता है। एंड्रॉइड स्टूडियो (v1.1) पूर्वावलोकन फलक में पूरी तरह से गलत दिखता है लेकिन डिवाइस पर यह ठीक है।
मूरत Murगट

26

@ मार्ग का उत्तर पीछे की ओर है, क्योंकि परत-सूची आरेख ऊपर से नीचे की ओर खींचती है (जिसका अर्थ है कि सूची में अंतिम आइटम ऊपर खींचा गया है):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
<item>
      <shape>
            <solid android:color="#535353" />
      </shape>
</item>
<!-- This is the main color -->
<item android:bottom="1dp">
     <shape>
           <solid android:color="#252525" />
     </shape>
</item>

</layer-list>

यह प्रभावी रूप से रेखा के रंग के साथ आकृति को भर देगा, फिर इसके ऊपर की पृष्ठभूमि का रंग आकर्षित करेगा, जिससे लाइन रंग के माध्यम से अंतिम 1dp स्पष्ट हो जाएगा।


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


<item>
    <shape android:shape="rectangle" >
        <stroke  android:width="2dp"
                 android:color="#BBBBBB" />
        <solid android:color="@android:color/transparent" />
    </shape>
</item>
<item  android:bottom="2dp" >
    <shape android:shape="rectangle" >
        <stroke  android:width="2dp"
                 android:color="@color/main_background_color" />
        <solid android:color="@android:color/transparent" />
    </shape>
</item>


2

मैंने निम्नलिखित कोड का उपयोग किया है।

<?xml version="1.0" encoding="UTF-8"?>
<!-- inset is used to remove border from top, it can remove border from any other side-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetTop="-2dp" android:insetLeft="-2dp" android:insetRight="-2dp"
    >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle">
        <stroke android:width="1dp" android:color="@color/colorPrimary" />
        <solid android:color="#0000"/>
        <padding android:left="2dp" android:top="2dp" android:bottom="2dp" android:right="2dp"/>
    </shape>
</inset>

0

सरल और कुशल

पारदर्शी दृश्य और सब कुछ जो बाहर है, में कुछ रंग का एक ओवरले है, जो आप कर सकते हैं वह है कि केंद्र के दृश्य को बाहर की ओर देखने के बिना केंद्र के दृश्य को घेरने वाले विचारों का निर्माण करना है।

इस तरह आप लेआउट के लिए एक आउटरेबल होने से बच जाते हैं और रनटाइम पर गणना करने के बिना आपके पास व्यूज की दूरी पर अधिक नियंत्रण होता है।

<androidx.constraintlayout.widget.ConstraintLayout .. >

    <View
        android:id="@+id/center"
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:background="@color/transparent"/>

   <View
        android:id="@+id/left_overlay"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/center"
        app:layout_constraintTop_toBottomOf="@id/top_overlay"
        app:layout_constraintBottom_toTopOf="@id/bottom_overlay"
        android:background="@color/black"
        android:alpha="0.5"
        />

    <View
        android:id="@+id/right_overlay"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toRightOf="@id/center"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/top_overlay"
        app:layout_constraintBottom_toTopOf="@id/bottom_overlay"
        android:background="@color/black"
        android:alpha="0.5"
        />

    <View
        android:id="@+id/top_overlay"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/center"
        android:background="@color/black"
        android:alpha="0.5"
        />

    <View
        android:id="@+id/bottom_overlay"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/center"
        android:background="@color/black"
        android:alpha="0.5"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

जीएल

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