Come faccio a mettere un bordo attorno a una visualizzazione di testo Android?


Risposte:


1274

È possibile impostare una forma tracciabile (un rettangolo) come sfondo per la vista.

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

E rettangolo draw.back.xml (messo nella 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>

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


83
E se volessi solo il bordo superiore?
happyhardik

19
@whyoz Il suo metodo aggiunge complessità non necessaria per visualizzare la gerarchia. Per utilizzare il suo metodo sono necessarie due viste aggiuntive (un contenitore di layout e la vista del bordo). Pertanto, se hai molte viste a cui devi aggiungere un bordo, l'albero della vista diventerà ingestibile.
Konstantin Burov,

5
@whyoz, tuttavia questo metodo potrebbe essere applicato tramite stili e temi, mentre il metodo YongGu non può essere utilizzato in questo modo.
Konstantin Burov,

12
Solo per il bordo superiore , vedere questa domanda .
Pang

7
È possibile utilizzare questo strumento http://shapes.softartstudio.com per generare disegni.
Arda Basoglu,

187

Consentitemi di riassumere alcuni diversi metodi (non programmatici).

Utilizzando una forma disegnabile

Salvare quanto segue come file XML nella cartella di disegno (ad esempio, my_border.xml):

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

    <!-- View background color -->
    <solid
        android:color="@color/background_color" >
    </solid>

    <!-- View border color and width -->
    <stroke
        android:width="1dp"
        android:color="@color/border_color" >
    </stroke>

    <!-- The radius makes the corners rounded -->
    <corners
        android:radius="2dp"   >
    </corners>

</shape>

Quindi impostalo come sfondo per TextView:

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_border" />

Altro aiuto:

Usando una patch 9

Una patch 9 è un'immagine di sfondo estensibile. Se crei un'immagine con un bordo, questo darà a TextView un bordo. Tutto quello che devi fare è creare l'immagine e quindi impostarla sullo sfondo in TextView.

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_ninepatch_image" />

Ecco alcuni link che mostreranno come creare un'immagine a 9 patch:

E se volessi solo il bordo superiore?

Utilizzando un elenco di livelli

È possibile utilizzare un elenco di livelli per impilare due rettangoli uno sopra l'altro. Rendendo il secondo rettangolo leggermente più piccolo del primo rettangolo, puoi creare un effetto bordo. Il primo rettangolo (inferiore) è il colore del bordo e il secondo rettangolo è il colore di sfondo.

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

    <!-- Lower rectangle (border color) -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/border_color" />
        </shape>
    </item>

    <!-- Upper rectangle (background color) -->
    <item android:top="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/background_color" />
        </shape>
    </item>
</layer-list>

L'impostazione android:top="2dp"compensa la parte superiore (la rende più piccola) di 2dp. Ciò consente al primo rettangolo (inferiore) di mostrare, dando un effetto bordo. Puoi applicarlo allo sfondo TextView nello stesso modo in cui è shapestato fatto il disegno sopra.

Ecco alcuni altri collegamenti sugli elenchi di livelli:

Usando una patch 9

Puoi semplicemente creare un'immagine a 9 patch con un singolo bordo. Tutto il resto è lo stesso di cui sopra.

Utilizzando una vista

Questo è un trucco, ma funziona bene se devi aggiungere un separatore tra due viste o un bordo a un singolo TextView.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- This adds a border between the TextViews -->
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@android:color/black" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Ecco alcuni altri link:


24
Accidenti, border: 1px solid #999;non si suppone che sia così complicato.
Achshar,

E se volessi il bordo della visualizzazione del testo, che ha anche l'effetto ombra e increspatura?
Akash Dubey,

@AkashDubey, mi dispiace, non l'ho mai fatto prima. Ti suggerisco di provarli separatamente e di combinarli. Se rimani bloccato, fai una nuova domanda su Stack Overflow.
Suragch

49

Il modo semplice è aggiungere una vista per TextView. Esempio per la linea di confine inferiore:

<LinearLayout android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:text="@string/title"
        android:id="@+id/title_label"
        android:gravity="center_vertical"/>
    <View
        android:layout_width="fill_parent"
        android:layout_height="0.2dp"
        android:id="@+id/separator"
        android:visibility="visible"
        android:background="@android:color/darker_gray"/>

</LinearLayout>

Per i bordi delle altre direzioni, regolare la posizione della vista del separatore.


3
Per la mia esperienza, questa soluzione, sui vecchi dispositivi, ha un impatto visibile silenzioso sulle prestazioni dell'app.
Roberto Lombardini,

43
Questa è una soluzione orribile dal punto di vista dell'inflazione. Si creano 3 nuovi elementi di visualizzazione e si aggiunge un altro livello nella profondità della gerarchia di visualizzazione
philipp

Peggior soluzione a causa della prospettiva di inflazione vista come ha detto Philipp. Sai che textView ha un tag xml specifico per fare proprio questo: definisci un'immagine da disegnare a sinistra / destra / in alto / in basso e suscita il tuo TextView, e sono conosciuti come android: drawable ****
Mathias Seguy Android2ee

32

Ho risolto questo problema estendendo la visualizzazione del testo e disegnando un bordo manualmente. Ho anche aggiunto in modo da poter selezionare se un bordo è punteggiato o tratteggiato.

public class BorderedTextView extends TextView {
        private Paint paint = new Paint();
        public static final int BORDER_TOP = 0x00000001;
        public static final int BORDER_RIGHT = 0x00000002;
        public static final int BORDER_BOTTOM = 0x00000004;
        public static final int BORDER_LEFT = 0x00000008;

        private Border[] borders;

        public BorderedTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }

        public BorderedTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public BorderedTextView(Context context) {
            super(context);
            init();
        }
        private void init(){
            paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(4);        
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if(borders == null) return;

            for(Border border : borders){
                paint.setColor(border.getColor());
                paint.setStrokeWidth(border.getWidth());

                if(border.getStyle() == BORDER_TOP){
                    canvas.drawLine(0, 0, getWidth(), 0, paint);                
                } else
                if(border.getStyle() == BORDER_RIGHT){
                    canvas.drawLine(getWidth(), 0, getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_BOTTOM){
                    canvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_LEFT){
                    canvas.drawLine(0, 0, 0, getHeight(), paint);
                }
            }
        }

        public Border[] getBorders() {
            return borders;
        }

        public void setBorders(Border[] borders) {
            this.borders = borders;
        }
}

E la classe di confine:

public class Border {
    private int orientation;
    private int width;
    private int color = Color.BLACK;
    private int style;
    public int getWidth() {
        return width;
    }
    public void setWidth(int width) {
        this.width = width;
    }
    public int getColor() {
        return color;
    }
    public void setColor(int color) {
        this.color = color;
    }
    public int getStyle() {
        return style;
    }
    public void setStyle(int style) {
        this.style = style;
    }
    public int getOrientation() {
        return orientation;
    }
    public void setOrientation(int orientation) {
        this.orientation = orientation;
    }
    public Border(int Style) {
        this.style = Style;
    }
}

Spero che questo aiuti qualcuno :)


Come inizializzare i bordi?
zionpi,

Non può funzionare correttamente, poiché il codice mostra che disegna i bordi alla metà delle dimensioni del valore definito
ucMedia

14

Stavo solo guardando una risposta simile: è possibile farlo con un colpo e la seguente sostituzione:

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

Grande! La mia unica preoccupazione è che il colpo sia brutto agli angoli quando uso drawRoundRect, sia sul telefono che nell'emulatore.
Erdomester,

1
@erdomester Maybe Paint StrokePaint = new Paint (Paint.ANTI_ALIAS_FLAG); risolverà il problema "brutto agli angoli"
P-RAD,

14

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

In che modo tale forma XML si collega a textView?
Neo42,

14

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

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

È possibile applicarlo a tutte le visualizzazioni di testo da un unico posto?
Ian Warburton,

Bello per una sveltina. Ma a seconda della versione del dispositivo in esecuzione, questo può avere effetti molto insoliti. Questo perché Google continua a cambiare l'aspetto di EditTexts (devi rimanere di moda!)
Scott Biggs

11

Ho trovato un modo migliore per mettere un bordo attorno a TextView.

Usa un'immagine a nove patch per lo sfondo. È piuttosto semplice, l'SDK è dotato di uno strumento per creare l'immagine a 9 patch e non prevede assolutamente alcuna codifica.

Il link è http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch .


2
Utile, sì, ma come va meglio?
aggregato

2
Usando una forma come dice la risposta accettata è meglio di una 9-patch, un file XML è più flessibile di una risorsa grafica
Jose_GD

Certo, se vuoi limitarti a creare la grafica che desideri a livello di programmazione, allora è più flessibile.
Nick,

2
L'approccio della forma è inutile. Forse sono l'unico che sperimenta, che il tag "solido" viene sempre elaborato, indipendentemente dal fatto che sia impostato su trasparente o meno. E se voglio creare un BORDER, intendo un BORDER e non un rettangolo con bordi interni colorati e altrimenti colorati. Ed è MAI solido solido trasparente. Disturba sempre il colore. Inoltre, una classe, che eredita da un'altra, dovrebbe avere anche tutte le caratteristiche, perché è ereditata. davvero non riesco a capire, perché le linee guida elementari di progettazione OO sono interrotte da Android. Ad esempio, ho ereditato dal pulsante. Tutte le funzionalità sono sparite. Perché ?
Icbytes,

2
@Jeremie Visibilmente più lento? Come lo osservi?
IgorGanapolsky,

11

Puoi aggiungere qualcosa del genere 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>

Perché è necessario l'ictus?
IgorGanapolsky,

@IgorGanapolsky, il tratto crea il bordo effettivo?
Tash Pemhiwa,

10

Controlla il link in basso per creare gli angoli arrotondati http://androidcookbook.com/Recipe.seam?recipeId=2318

La cartella disegnabile, sotto res, in un progetto Android non è limitata alle bitmap (file PNG o JPG), ma può anche contenere forme definite in file XML.

Queste forme possono quindi essere riutilizzate nel progetto. Una forma può essere utilizzata per mettere un bordo attorno a un layout. Questo esempio mostra un bordo rettangolare con angoli curvi. Un nuovo file chiamato customborder.xml viene creato nella cartella dei disegni (in Eclipse utilizzare il menu File e selezionare Nuovo, quindi File, con la cartella dei disegni selezionata digitare il nome del file e fare clic su Fine).

Viene inserito l'XML che definisce la forma del bordo:

<?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners android:radius="20dp"/>
    <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp"/>
    <solid android:color="#CCCCCC"/>
</shape>

L'attributo android:shapeè impostato su rettangolo (i file di forma supportano anche ovale, linea e anello). Rettangolo è il valore predefinito, quindi questo attributo potrebbe essere tralasciato se si sta definendo un rettangolo. Consulta la documentazione di Android sulle forme su http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape per informazioni dettagliate su un file di forme.

Gli angoli dell'elemento imposta gli angoli del rettangolo da arrotondare. È possibile impostare un raggio diverso su ciascun angolo (consultare il riferimento Android).

Gli attributi di riempimento vengono utilizzati per spostare i contenuti della vista a cui viene applicata la forma, per evitare che i contenuti si sovrappongano al bordo.

Il colore del bordo qui è impostato su un grigio chiaro (valore RGB esadecimale CCCCCC).

Le forme supportano anche i gradienti, ma qui non viene utilizzato. Ancora una volta, vedi le risorse Android per vedere come viene definito un gradiente. La forma viene applicata al laypout usando android:background="@drawable/customborder".

All'interno del layout è possibile aggiungere altre viste come di consueto. In questo esempio è stato aggiunto un singolo TextView e il testo è bianco (RGB esadecimale FFFFFF). Lo sfondo è impostato su blu, oltre a un po 'di trasparenza per ridurre la luminosità (valore alfa RGB esadecimale A00000FF). Infine, il layout viene spostato dal bordo dello schermo posizionandolo in un altro layout con una piccola quantità di riempimento. Il file di layout completo è quindi:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="5dp">
    <LinearLayout android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:background="@drawable/customborder">
        <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="Text View"
                android:textSize="20dp"
                android:textColor="#FFFFFF"
                android:gravity="center_horizontal"
                android:background="#A00000FF" />
    </LinearLayout>
</LinearLayout>

Le risposte ai soli link sono altamente scoraggiate, poiché i link tendono a rompersi ad un certo punto in futuro. Inserisci parti pertinenti del tuo link in questa risposta in modo che le informazioni rimangano disponibili, anche se il link no.
Andy

8

Ho un modo per farlo in modo molto semplice e vorrei condividerlo.

Quando voglio quadrare le TextView, le inserisco semplicemente in un LinearLayout. Ho impostato il colore di sfondo del mio LinearLayout e ho aggiunto un margine al mio TextView. Il risultato è esattamente come se si quadrasse TextView.


2

Cambiare 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', grado: 4.1


2

È possibile creare uno sfondo personalizzato per la visualizzazione del testo. Passaggi 1. Vai al tuo progetto. 2. Vai a risorse e fai clic con il pulsante destro del mouse su drawable. 3. Fare clic su Nuovo -> File di risorse estraibile 4. Assegnare il nome al file 5. Incollare il seguente codice nel file

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="@color/colorBlack" />
<padding android:left="1dp"
    android:top="1dp"
    android:right="1dp"
    android:bottom="1dp" />
<corners android:radius="6dp" />
<solid android:color="#ffffffff" />

  1. Per la visualizzazione del testo in cui si desidera utilizzarlo come backgroud,

    Android: background = "@ drawable / your_fileName"


1

Ecco la mia "semplice" classe di supporto che restituisce un ImageView con il bordo. Rilascialo nella cartella utils e chiamalo così:

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

Come si usa selectionBorder?
Tash Pemhiwa,

@TashPemhiwa Button.setBackgroundDrawable ();
NinjaOnSafari

0

Questo può aiutarti.

<RelativeLayout
    android:id="@+id/textbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@android:color/darker_gray" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_margin="3dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:text="@string/app_name"
        android:textSize="20dp" />

</RelativeLayout

0

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


0

Prova questo:

<shape>
    <solid android:color="@color/txt_white"/>
    <stroke android:width="1dip" android:color="@color/border_black"/>
</shape>

0

Esistono molti modi per aggiungere un bordo a un textView. Il più semplice è creando un disegno personalizzato e impostandolo come android:background="@drawable/textview_bg"per textView.

Textview_bg.xml andrà in Drawables e può essere qualcosa del genere. Puoi avere uno solido uno gradientsfondo (o niente se non richiesto), cornersper aggiungere un raggio d'angolo estroke aggiungere un bordo.

textview_bg.xml

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

        <corners
            android:radius="@dimen/dp_10"/>

        <gradient
            android:angle="225"
            android:endColor="#FFFFFF"
            android:startColor="#E0E0E0" />

        <stroke
            android:width="2dp"
            android:color="#000000"/>

    </shape>

0
  <View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="@android:color/black" />

questo codice è abbastanza per poterlo posizionare dove vuoi


0

setBackground sulla tua visualizzazione di testo XML,

aggiungi il file arrotondato_textview.xml nella tua directory disegnabile.

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

imposta file disegnabili in background textView.


-1

In realtà, è molto semplice. Se si desidera un semplice rettangolo nero dietro la visualizzazione di testo, è sufficiente aggiungere 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"/>

chiede un bordo non a sfondo pieno.
Guy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.