Android में स्टाइल बॉटम लाइन


120

मुझे एक Android आकार बनाने की आवश्यकता है ताकि केवल नीचे स्ट्रोक (धराशायी लाइन) हो। जब मैं निम्नलिखित प्रयास करता हूं, तो स्ट्रोक केंद्र के माध्यम से आकार को ठीक करता है। क्या किसी को पता है कि यह कैसे सही है? स्ट्रोक को नीचे की रेखा / सीमा होना चाहिए। मैं एक पाठ के लिए एक पृष्ठभूमि के रूप में आकार का उपयोग कर रहा हूँ। कृपया, कभी इस बात पर ध्यान न दें कि मुझे इसकी आवश्यकता क्यों है।

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

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#1bd4f6" />
        </shape>
    </item>

    <item>
        <shape android:shape="line" >
            <padding android:bottom="1dp" />

            <stroke
                android:dashGap="10px"
                android:dashWidth="10px"
                android:width="1dp"
                android:color="#ababb2" />
        </shape>
    </item>

</layer-list>

2
मैं आपके git प्रोजेक्ट को इतनी सरलता से क्यों देखूंगा? क्या आप इस परियोजना के लिए हिट की तलाश कर रहे हैं?
कोट्टो मौनियो

जिज्ञासा से बाहर, आप डैश आकार निर्दिष्ट करने के लिए px का उपयोग क्यों कर रहे हैं?
जोस_जीडी

जवाबों:


313

यह एक हैक की तरह है, लेकिन मुझे लगता है कि यह शायद इसे करने का सबसे अच्छा तरीका है। धराशायी लाइन हमेशा ऊंचाई की परवाह किए बिना, तल पर होगी।

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

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#1bd4f6" />
        </shape>
    </item>

    <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:dashGap="10px"
                android:dashWidth="10px"
                android:width="1dp"
                android:color="#ababb2" />
        </shape>
    </item>

</layer-list>

स्पष्टीकरण:

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


5
चतुर वास्तव में। मुझे यह पता लगाने में कुछ समय लगा कि इस काम से शीर्ष, दाएं और बाएं और स्ट्रोक चौड़ाई के बीच 1 dp (निरपेक्ष मूल्य में) का अंतर क्या है
जोस_गीडी

5
यह पूरी तरह से काम करता है, लेकिन क्या कोई इसमें गणित की व्याख्या के साथ उत्तर को पूरक कर सकता है (मेरे जैसे गरीब आत्माओं के लिए और आने वाले दिनों में यहां आने वाले किसी अन्य व्यक्ति के लिए) :)
source.rar

बहुत अच्छा काम करता है। और आप एक चयनकर्ता का भी उपयोग कर सकते हैं जो राज्य के आधार पर xmls की परत-सूची को इंगित करता है। मुझे यह पता लगाना था कि यह काम करता है और यह भी काम करता है।
डैकर

अनावश्यक ओवरड्राइव का परिचय न दें। मुझे लगता है कि @Aanan समाधान बेहतर है। अपनी आवश्यकताओं में से एक को संशोधित करने का प्रयास करें।
व्लाद

44

यह चाल ...

<item >
    <shape android:shape="rectangle">
        <solid android:color="#YOUR_BOTTOM_LINE_COLOR"/>
    </shape>
</item>

<item android:bottom="1.5dp">
    <shape android:shape="rectangle">
        <solid android:color="#YOUR_BG_COLOR"/>
    </shape>
</item>

दो आयत एक दूसरे पर ओवरलैप हैं और एक रेखा के रूप में एक और रंग दिखाने के लिए नीचे की जगह जोड़ते हैं। इसलिए, आप इसे दूसरे तरीके से करने के लिए आवेदन कर सकते हैं
जॉन्ग पुंगपुट

3
अच्छा जवाब है, लेकिन अतिरेक के साथ
लेस्टर

और तब भी काम नहीं करेगा जब आपके पास अल्फा के साथ रंग होंगे
डिर्क

43
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-6dp"
        android:left="-6dp"
        android:right="-6dp"
        android:bottom="0dp">

        <shape android:shape="rectangle">
            <solid android:color="#88FFFF00"/>
            <stroke
                android:width="5dp"
                android:color="#FF000000"/>
        </shape>
    </item>
</layer-list>

पूरी तरह से मेरे लिए काम किया! धन्यवाद।
हत्सगांधी

19

यह उत्तर उन Google खोजकर्ताओं के लिए है जो EditTextयहाँ की तरह नीचे की सीमा दिखाते हैं

नमूना

फोल्डर के dotted.xmlअंदर बनाएं drawableऔर इन्हें पेस्ट करें

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="0.5dp"
                android:color="@android:color/black" />    
            <solid android:color="#ffffff" />
            <stroke
                android:width="1dp"
                android:color="#030310"
                android:dashGap="5dp"
                android:dashWidth="5dp" />
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
        </shape>
    </item>
</layer-list>

फिर बस हमारे द्वारा बनाई गई android:backgroundविशेषता को सेट करें dotted.xml। आपका EditTextलुक ऐसा है।

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Some Text"
    android:background="@drawable/dotted" />

13

मुझे लगता है कि यह सभी नकारात्मक पैडिंग या स्टॉर्क के बिना सीधा है।

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

    <item android:drawable="@color/main_bg_color"/>
    <item android:gravity="bottom">
        <shape android:shape="rectangle">
            <size android:height="5dp"/>
            <solid android:color="@color/bottom_bar_color"/>
        </shape>
    </item>
</layer-list>

2
यदि आपको एक विशेष पृष्ठभूमि की आवश्यकता नहीं है, तो आप <item android:drawable="@color/main_bg_color"/>
ओवरक्लोवर

1
एंड्रॉइड 27 के साथ काम करता है, एंड्रॉइड 19 के साथ काम नहीं करता है ... अन्य संस्करणों का परीक्षण नहीं किया।
Ridcully

10

अगला xml ड्रा करने योग्य कोड आज़माएं:

    <layer-list>
        <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
            <shape>
                <solid android:color="@android:color/transparent" />
                <stroke
                    android:width="1dp"
                    android:color="#fff" />
            </shape>
        </item>
    </layer-list>

7

मुझे लगता है कि अगर आपको समझ में आया तो आपको आकार का उपयोग करने की आवश्यकता नहीं है।

यदि आप निम्न छवि में दिखाए गए हैं तो निम्न लेआउट का उपयोग करें।

यहाँ छवि विवरण दर्ज करें

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

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="#1bd4f6"
    android:paddingBottom="4dp" >

    <TextView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:background="#ababb2"
        android:padding="5dp"
        android:text="Hello Android" />
 </RelativeLayout>

 </RelativeLayout>

संपादित करें

इन गुणों के साथ खेलें आपको परिणाम मिलेगा

    android:top="dimension"
    android:right="dimension"
    android:bottom="dimension"
    android:left="dimension"

इस तरह की कोशिश करो

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

<item>
    <shape android:shape="rectangle" >
        <solid android:color="#1bd4f6" />
    </shape>
</item>

<item android:top="20px"
    android:left="0px">
    <shape android:shape="line"  >
        <padding android:bottom="1dp" />

        <stroke
            android:dashGap="10px"
            android:dashWidth="10px"
            android:width="1dp"
            android:color="#ababb2" />
    </shape>
</item>

</layer-list>

मेरा स्ट्रोक एक धराशायी लाइन है
कोटे मौनियो

यह काम करता है, केवल कैविएट है जब दृश्य बहुत छोटा हो जाता है, आकार अदृश्य हो जाता है
जोस_गॉड

आपको हमेशा इस बात का ध्यान रखना चाहिए कि अनावश्यक अतिवृद्धि का परिचय न दें।
व्लाद

5

एक सरल उपाय:

ड्रा करने योग्य फ़ोल्डर में edittext_stroke.xml के रूप में एक ड्रॉबल फ़ाइल बनाएँ । नीचे दिया गया कोड जोड़ें:

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

लेआउट फ़ाइल में, ड्राटेबल को एडिटटेक्स्ट में जोड़ें

एंड्रॉयड: drawableBottom = "@ drawable / edittext_stroke"

<EditText
      android:textColor="@android:color/white"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:drawableBottom="@drawable/edittext_stroke"
      />

इस स्थिति में आपकी रेखा केंद्र में होगी, नीचे की ओर नहीं
Sviatoslav Zaitsev

4

आमतौर पर इसी तरह के कार्यों के लिए - मैंने परत-सूची इस तरह बनाई है:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
        <solid android:color="@color/underlineColor"/>
        </shape>
    </item>
<item android:bottom="3dp">
    <shape android:shape="rectangle">
        <solid android:color="@color/buttonColor"/>
    </shape>
</item>

विचार यह है कि पहले आप आयत को रेखांकन के साथ खींचते हैं और फिर इस के ऊपर आप वास्तविक बटन के साथ एक और आयत खींचते हैं, लेकिन नीचे की ओर लगाने से। यह हमेशा काम करता है।

लेकिन जब मुझे पारदर्शी होने के लिए बटन की आवश्यकता होती है तो मैं ऊपर की ओर खींचने योग्य उपयोग नहीं कर सकता। मुझे एक और उपाय सूझा

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

<item android:drawable="@drawable/white_box" android:gravity="bottom"     android:height="2dp"/>
</layer-list>

(जैसा कि आप देख सकते हैं यहाँ mainButtonColor पारदर्शी है और white_box सफ़ेद सॉलिड के साथ सिर्फ एक साधारण आयताकार है)


2

अपनी पसंद के साथ इस xml रंग को बदलें।

<item>
    <layer-list>
        <item>
            <shape>
                <solid android:color="@color/gray_500" />

            </shape>
        </item>
        <!-- CONTENT LAYER -->
        <item android:bottom="2dp" >
            <shape>
                <solid android:color="#ffffff" />
            </shape>
        </item>
    </layer-list>
</item>

मामले में यदि आप प्रोग्रामेटिक रूप से चाहते हैं

public static Drawable getStorkLineDrawable(@ColorInt int colorStrok, int    iSize, int left, int top, int right, int bottom)

{
    GradientDrawable gradientDrawable = new GradientDrawable();
    gradientDrawable.setShape(GradientDrawable.RECTANGLE);
    gradientDrawable.setStroke(iSize, colorStrok);
    LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{gradientDrawable});
    layerDrawable.setLayerInset(0, left, top, right, bottom);
    return layerDrawable;
}

इस तरीके को कॉल करें

  Drawable yourLineDrawable=  getStorkLineDrawable(yourColor, iSize, -iSize, -iSize, -iSize, 0);

2

इसने मेरे लिए सबसे अच्छा काम किया:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-5dp" android:left="-5dp" android:right="-5dp" android:bottom="0dp">
        <shape android:shape="rectangle">
            <stroke android:width="4dp" android:color="#ff0000"/>
        </shape>
    </item>
</layer-list>

केवल नीचे की तरफ लाइन दिखाता है। आप अपनी पसंद के अनुसार स्ट्रोक की चौड़ाई के साथ आसानी से बदल सकते हैं और ऊपर, बाएं, दाएं को तदनुसार अपडेट कर सकते हैं।


2

ऐसा करने का सबसे आसान तरीका उस दृश्य के बाद रखा गया है जहाँ आप नीचे की सीमा चाहते हैं

    <?xml version="1.0" encoding="utf-8"?>
    <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/colorPrimary" />

0

यह पारदर्शी पृष्ठभूमि के साथ पूरी तरह से पारदर्शी एडिटेक्स है।

<item>
    <shape android:shape="rectangle" >
        <solid android:color="@color/transparent" />
    </shape>
</item>

<item android:top="-3dp" android:right="-3dp" android:left="-3dp">
    <shape>
        <solid android:color="@android:color/transparent" />
        <stroke

            android:width="2dp"
            android:color="@color/bottomline" />
    </shape>
</item>


0

एक सरल उपाय :

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:top="-1dp">

        <shape android:shape="rectangle">

            <solid android:color="#AARRGGBB" />

            <stroke
                android:width="5dp"
                android:color="@android:color/red"
                android:dashWidth="10dp"
                android:dashGap="12dp" />

        </shape>
    </item>
</layer-list>

और अंत में हमारे पास ऐसा कुछ है :)

यहाँ छवि विवरण दर्ज करें

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