Android'de Alt Satırda Stil


120

Sadece alt kısımda çizgi (kesikli çizgi) olacak şekilde bir android şekli oluşturmam gerekiyor. Aşağıdakini denediğimde, çizgi şekli tam ortasından ikiye böler. Bunu nasıl doğru yapacağını bilen var mı? konturun alt çizgi / sınır olması gerekir. Şekli bir TextView için arka plan olarak kullanıyorum. Lütfen, neden ihtiyacım olduğunu boşver.

<?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
Neden bu kadar basit bir şey için git projeni görmeye gideyim? Bu proje için hit mi arıyorsunuz?
Cote Mounyo

meraktan soruyorum, neden tire boyutlarını belirtmek için piksel kullanıyorsunuz?
Jose_GD

Yanıtlar:


313

Bu bir çeşit hack, ama sanırım bunu yapmanın en iyi yolu bu. Kesikli çizgi, yükseklikten bağımsız olarak her zaman altta olacaktır.

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

Açıklama:

İkinci şekil, kesikli dış hatları olan şeffaf dikdörtgendir. Kenarlığın yalnızca alt kısımda görünmesini sağlamanın anahtarı, diğer tarafları ayarlayan negatif kenar boşluklarında yatmaktadır. Bu negatif kenar boşlukları, kesikli çizgiyi bu taraflarda çizilen alanın dışına "iter" ve sadece alt kısımdaki çizgiyi bırakır. Potansiyel bir yan etki (denemedim), kendi sınırlarının dışına çıkan görüşler için, negatif kenar sınırlarının görünür hale gelmesidir.


5
Gerçekten zekice. Bu işe
yarayan şeyin

5
Bu mükemmel bir şekilde çalışıyor, ancak biri lütfen cevabı buradaki matematiğin bir açıklamasıyla tamamlayabilir mi (benim gibi zavallı ruhlar ve gelecek günlerde buraya gelenler için) :)
source.rar

Harika çalışıyor. Ve duruma bağlı olarak katman listesi xml'lerine işaret eden bir seçici bile kullanabilirsiniz. Bunu anlamalıydım ve işe yarıyor.
Dacker

Gereksiz fazla çekim yapmayın. @Anonan çözümünün daha iyi olduğunu düşünüyorum. Bunu ihtiyaçlarınıza göre değiştirmeyi deneyin.
Vlad

44

Bu hile yapar ...

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

Birbiriyle örtüşen iki dikdörtgen vardır ve başka bir rengi çizgi olarak göstermek için alt boşluk ekleyin. yani, bunu başka bir şekilde yapmak için uygulayabilirsiniz
Jongz Puangput

3
İyi yanıt, ancak fazladan aşırı çekimle
Lester

ve alfa ile renklere sahip olduğunuzda da çalışmayacaktır
Dirk

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>

Benim için mükemmel çalıştı! Teşekkürler.
hetsgandhi

19

Bu cevap, EditTextburadaki gibi noktalı alt kenarlığı göstermek isteyen google arama yapanlar içindir.

örneklem

Klasörün dotted.xmliçinde oluşturun drawableve bunları yapıştırın

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

Ardından, android:backgroundözelliği dotted.xmlaz önce oluşturduğumuz olarak ayarlayın. Buna EditTextbenziyorsun.

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

13

Tüm bu olumsuz yastıklamalar veya leylekler olmadan bunun basit olduğunu hissediyorum.

<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
Özel bir geçmişe ihtiyacınız yoksa<item android:drawable="@color/main_bg_color"/>
Overclover

1
Android 27 ile çalışır, Android 19 ile çalışmaz ... diğer sürümleri test etmedi.
ridcully at

10

Sonraki xml çekilebilir kodunu deneyin:

    <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

Seni anladıysam şekil kullanmana gerek yok diye düşünüyorum.

Aşağıdaki resimde gösterildiği gibi arıyorsanız, aşağıdaki düzeni kullanın.

görüntü açıklamasını buraya girin

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

DÜZENLE

Bu özelliklerle oynayarak sonuç alacaksınız

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

böyle dene

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


Bu işe yarıyor, tek uyarı, görünüm çok küçük olduğunda, şeklin görünmez hale
gelmesidir

Gereksiz fazla çekim yapmamaya her zaman dikkat etmelisiniz.
Vlad

5

Basit bir çözüm:

Çekilebilir klasörde edittext_stroke.xml olarak çekilebilir bir dosya oluşturun . Aşağıdaki kodu ekleyin:

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

Düzen dosyasında, çekilebilir dosyayı edittext'e şu şekilde ekleyin:

robot: drawableBottom = "@ çekilebilir / edittext_stroke"

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

Bu durumda hattınız altta değil merkezde olacak
Sviatoslav Zaitsev

4

Genellikle benzer görevler için - bunun gibi çekilebilir katman listesi oluşturdum:

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

Buradaki fikir, önce underlineColor ile dikdörtgeni çizmeniz ve ardından bunun üzerine gerçek buttonColor ile başka bir dikdörtgen çizmeniz, ancak bottomPadding'i uygulamanızdır. Hep işe yarar.

Ancak şeffaf olmak için buttonColor'a ihtiyacım olduğunda, yukarıdaki çekmeceyi kullanamadım. Bir çözüm daha buldum

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

(burada görebileceğiniz gibi mainButtonColor şeffaftır ve white_box, beyaz Solid ile çizilebilen basit bir dikdörtgendir)


2

bu xml'yi tercihinize göre rengini değiştirin.

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

Durumda programlı olarak istiyorsanız

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

bu yöntemi şöyle çağır

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

2

Bu benim için en iyisi oldu:

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

Satırı yalnızca alttaki gösterir. Kontur genişliği ile istediğiniz boyuta kolayca değiştirebilir ve buna göre üst, sol, sağ kısımları güncelleyebilirsiniz.


2

Bunu yapmanın en kolay yolu, bu görünümden sonra alt kenarlığı istediğiniz yere koymaktır.

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

0

tamamen şeffaf Edittext ve şeffaf arka planlıdır.

<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

Basit bir çözüm :

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

Ve nihayet böyle bir şeye sahibiz :)

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.