with - web android studio




Come posso inserire un bordo attorno a una vista testo Android? (11)

È possibile tracciare un bordo attorno a una vista testo?


È possibile impostare il bordo con due metodi. Uno è disegnabile e il secondo è programmatico.

Utilizzando Drawable

<shape>
    <solid android:color="@color/txt_white"/>
    <stroke android:width="1dip" android:color="@color/border_gray"/>
    <corners android:bottomLeftRadius="10dp"
             android:bottomRightRadius="0dp"
             android:topLeftRadius="10dp"
             android:topRightRadius="0dp"/>
    <padding android:bottom="0dip"
             android:left="0dip"
             android:right="0dip"
             android:top="0dip"/>
</shape>

Programmatico

public static GradientDrawable backgroundWithoutBorder(int color) {

    GradientDrawable gdDefault = new GradientDrawable();
    gdDefault.setColor(color);
    gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                                           radius, radius });
    return gdDefault;
}

Cambiando la risposta di Konstantin Burov perché non funziona nel mio caso:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <stroke android:width="2dip" android:color="#4fa5d5"/>
            <corners android:radius="7dp"/>
        </shape>
    </item>
</selector>

compileSdkVersion 26 (Android 8.0), minSdkVersion 21 (Android 5.0), targetSdkVersion 26, implementazione 'com.android.support:appcompat-v7:26.1.0', gradle: 4.1


Crea una vista del bordo con il colore dello sfondo come il colore del bordo e la dimensione della tua vista del testo. imposta il riempimento della vista del bordo come larghezza del bordo. Imposta il colore di sfondo della vista del testo come colore desiderato per la vista del testo. Ora aggiungi la tua vista di testo all'interno della vista del bordo.


Ecco la mia classe helper "semplice" che restituisce un ImageView con il bordo. Basta rilasciarlo nella cartella utils e chiamarlo in questo modo:

ImageView selectionBorder = BorderDrawer.generateBorderImageView(context, borderWidth, borderHeight, thickness, Color.Blue);

Ecco il codice.

/**
 * Because creating a border is Rocket Science in Android.
 */
public class BorderDrawer
{
    public static ImageView generateBorderImageView(Context context, int borderWidth, int borderHeight, int borderThickness, int color)
    {
        ImageView mask = new ImageView(context);

        // Create the square to serve as the mask
        Bitmap squareMask = Bitmap.createBitmap(borderWidth - (borderThickness*2), borderHeight - (borderThickness*2), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(squareMask);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, (float)borderWidth, (float)borderHeight, paint);

        // Create the darkness bitmap
        Bitmap solidColor = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(solidColor);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, borderWidth, borderHeight, paint);

        // Create the masked version of the darknessView
        Bitmap borderBitmap = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(borderBitmap);

        Paint clearPaint = new Paint();
        clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        canvas.drawBitmap(solidColor, 0, 0, null);
        canvas.drawBitmap(squareMask, borderThickness, borderThickness, clearPaint);

        clearPaint.setXfermode(null);

        ImageView borderView = new ImageView(context);
        borderView.setImageBitmap(borderBitmap);

        return borderView;
    }
}


Ho un modo per farlo molto semplice e mi piacerebbe condividerlo.

Quando voglio quadrare mi TextViews, li ho appena messi in un LinearLayout. Ho impostato il colore di sfondo del mio LinearLayout e aggiungo un padding al mio TextView. Il risultato è esattamente come se si allinea il TextView.


In realtà, è molto semplice. Se vuoi un semplice rettangolo nero dietro Textview, aggiungi android:background="@android:color/black" all'interno dei tag TextView. Come questo:

<TextView
    android:textSize="15pt" android:textColor="#ffa7ff04"
    android:layout_alignBottom="@+id/webView1"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:background="@android:color/black"/>

La soluzione più semplice che ho trovato (e che funziona davvero):

<TextView
    ...
    android:background="@android:drawable/editbox_background" />

Puoi aggiungere qualcosa come questo nel tuo codice:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" >
    <solid android:color="#ffffff" />
    <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

Puoi impostare una forma disegnabile (un rettangolo) come sfondo per la vista.

<TextView android:text="Some text" android:background="@drawable/back"/>

E rettangolo drawable back.xml (metti in cartella res / drawable):

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="@android:color/white" />
   <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

Puoi usare @android:color/transparent per il colore solido per avere uno sfondo trasparente. Puoi anche usare il padding per separare il testo dal bordo. per ulteriori informazioni consultare: http://developer.android.com/guide/topics/resources/drawable-resource.html


Stavo solo guardando una risposta simile - è possibile farlo con un tratto e il seguente override:

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {

Paint strokePaint = new Paint();
strokePaint.setARGB(255, 0, 0, 0);
strokePaint.setTextAlign(Paint.Align.CENTER);
strokePaint.setTextSize(16);
strokePaint.setTypeface(Typeface.DEFAULT_BOLD);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(2);

Paint textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setTextSize(16);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);

canvas.drawText("Some Text", 100, 100, strokePaint);
canvas.drawText("Some Text", 100, 100, textPaint);

super.draw(canvas, mapView, shadow); 
}




android-textview