{"id":12655,"date":"2017-08-23T15:57:47","date_gmt":"2017-08-23T13:57:47","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12655"},"modified":"2017-08-23T15:57:47","modified_gmt":"2017-08-23T13:57:47","slug":"android-icone-con-lettere-in-stile-material","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/android-icone-con-lettere-in-stile-material\/","title":{"rendered":"Android: icone con lettere in stile Material"},"content":{"rendered":"<p>Quando si mostrano dati in una ListView o RecyclerView, \u00e8 attualmente di uso comune accompagnare ognuna di esse con un&#8217;icona\u00a0all&#8217;estrema sinistra\u00a0che, in molti casi, consiste in\u00a0lettere incluse in un cerchio colorato. Queste lettere spesso rappresentano semplicemente l&#8217;iniziale del testo che segue e la loro realizzazione con gli strumenti che Android nativamente fornisce non \u00e8 molto complicata: esiste per\u00f2 una libreria che rende ancora pi\u00f9 semplice questo lavoro ed in questo post ve la presentiamo.<\/p>\n<p>Risponde al nome di <a href=\"https:\/\/github.com\/IvBaranov\/MaterialLetterIcon\" target=\"_blank\" rel=\"noopener\">MaterialLetterIcon<\/a> ed \u00e8 sufficiente la seguente direttiva Gradle inserita tra le dipendenze per averla a disposizione:<\/p>\n<pre class=\"lang:java decode:true\">compile 'com.github.ivbaranov:materiallettericon:0.2.2'<\/pre>\n<p>L&#8217;immagine mostra un esempio di quanto\u00a0possiamo realizzare molto velocemente:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/12\/android-material-design-letter-icon.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-12656\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/12\/android-material-design-letter-icon-184x300.jpg\" alt=\"\" width=\"184\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/12\/android-material-design-letter-icon-184x300.jpg 184w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/12\/android-material-design-letter-icon.jpg 400w\" sizes=\"auto, (max-width: 184px) 100vw, 184px\" \/><\/a><\/p>\n<p>Ad esempio, costruiamo il\u00a0layout dell&#8217;Activity con una ListView<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;ListView xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:id=\"@+id\/listview\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\/&gt;<\/pre>\n<p>e\u00a0collochiamo\u00a0il widget della libreria in un altro layout che modella la singola riga:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;RelativeLayout \r\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:orientation=\"horizontal\" \r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:padding=\"16dp\"&gt;\r\n\r\n    &lt;com.github.ivbaranov.mli.MaterialLetterIcon\r\n        android:layout_width=\"48dp\"\r\n        android:layout_height=\"48dp\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:id=\"@+id\/icon\"\r\n        android:layout_marginRight=\"16dp\"\/&gt;\r\n\r\n    &lt;TextView android:id=\"@+id\/contact\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:layout_toRightOf=\"@id\/icon\"\r\n        android:textSize=\"20sp\"\/&gt;\r\n\r\n&lt;\/RelativeLayout&gt;<\/pre>\n<p>Il codice Java dell&#8217;<em>onCreate<\/em> modeller\u00e0 l&#8217;interfaccia inserendo dati in un <em>ArrayAdapter<\/em> collegato alla <em>ListView<\/em> e valorizzando la MaterialLetterIcon\u00a0con la prima lettera della stringa:<\/p>\n<pre class=\"lang:java decode:true\">@Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n        ListView l= (ListView) findViewById(R.id.listview);\r\n        ArrayAdapter&lt;String&gt; adapter=\r\n                new ArrayAdapter&lt;String&gt;(this, R.layout.row_layout, R.id.contact, new ArrayList&lt;String&gt;())\r\n                {\r\n                    int[] colors=\r\n                            new int[]{\r\n                                    R.color.green,\r\n                                    R.color.orange,\r\n                                    R.color.indigo\r\n                            };\r\n                    @NonNull\r\n                    @Override\r\n                    public View getView(int position, View convertView, ViewGroup parent) {\r\n                        View v=super.getView(position, convertView, parent);\r\n                        MaterialLetterIcon letterIcon= \r\n                            (MaterialLetterIcon) v.findViewById(R.id.icon);\r\n                        String contact=getItem(position);\r\n                        letterIcon.setLetter(contact.substring(0,1));\r\n                        letterIcon.setShapeColor(ContextCompat.getColor(MainActivity.this, colors[position%colors.length]));\r\n                        return v;\r\n                    }\r\n                };\r\n\r\n        l.setAdapter(adapter);\r\n\r\n        adapter.add(\"Rossi Gianluca\");\r\n        adapter.add(\"Bianchi Enrico\");\r\n        adapter.add(\"Verdi Luciana\");\r\n        adapter.add(\"Rossi Anna\");\r\n        adapter.add(\"Neri Gianluca\");\r\n        adapter.add(\"Gialli Silvia\");\r\n        adapter.add(\"Verdi Simone\");\r\n    }<\/pre>\n<p>&nbsp;<\/p>\n<p>Per quanto riguarda i colori, abbiamo creato alcune risorse e, a giro, ne viene usato uno per colorare lo sfondo dell&#8217;icona: ovviamente, si possono scegliere politiche pi\u00f9 fantasiose.<\/p>\n<p>Le icone possono essere utilizzate anche esclusivamente con codice Java come\u00a0si vede nell&#8217;esempio fornito nell&#8217;hompage del progetto:<\/p>\n<pre class=\"lang:java decode:true\">MaterialLetterIcon icon = new MaterialLetterIcon.Builder(context) \/\/\r\n            .shapeColor(getResources().getColor(R.color.circle_color))\r\n            .setShapeType(SHAPE.CIRCLE)\r\n            .letter(\"S\")\r\n            .letterColor(getResources().getColor(R.color.letter_color))\r\n            .letterSize(26)\r\n            .lettersNumber(1)\r\n            .letterTypeface(yourTypeface)\r\n            .initials(false)\r\n            .initialsNumber(2)\r\n            .create();<\/pre>\n<p>Si possono inoltre personalizzare\u00a0in ogni aspetto &#8211; dai colori, al numero di lettere mostrate\u00a0fino alla forma dell&#8217;icona stessa &#8211; seguendo le istruzioni fornite dallo sviluppatore: ogni caratteristica sar\u00e0 assegnabile con un proprio metodo <em>setter<\/em>.<\/p>\n<p>Provate questa libreria e diteci cosa ne pensate.\u00a0Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si mostrano dati in una ListView o RecyclerView, \u00e8 attualmente di uso comune accompagnare ognuna di&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13213,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1682],"tags":[1278,1532,2001],"class_list":["post-12655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","tag-android","tag-librerie-android","tag-materiallettericon"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12655"}],"version-history":[{"count":6,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12655\/revisions"}],"predecessor-version":[{"id":13214,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12655\/revisions\/13214"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13213"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}