TagsEditText for hashTags
Ever wanted to add tag features to your edittext? Tags such as #tags or @mentions and handle each of the tags as a seperate object. If so then search no more as TagEditText library will do just that. To demostrate this lets start by creating a project and name it whatever we please. Mine is called ...
Ever wanted to add tag features to your edittext? Tags such as #tags or @mentions and handle each of the tags as a seperate object. If so then search no more as TagEditText library will do just that. To demostrate this lets start by creating a project and name it whatever we please. Mine is called TagEditTextApp.
Step 1 Add it in your root build.gradle at the end of repositories:
allprojects { repositories { maven { url "https://jitpack.io" } } }
Step 2 Add the dependency
dependencies { compile 'com.github.mabbas007:TagsEditText:1.0.5' }
Now that we have imported the library we can use it instead of the regular Edittext for our mentions/HashTags.
Create a xml in res value folder for template suggestions.
countries.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="country"> <item>Afghanistan</item> <item>Albania</item> <item>Algeria</item> <item>American Samoa</item> <item>Andorra</item> <item>Angola</item> <item>Anguilla</item> <item>Antarctica</item> <item>Antigua and Barbuda</item> <item>Argentina</item> <item>Armenia</item> <item>Aruba</item> <item>Australia</item> <item>Austria</item> <item>Azerbaijan</item> <item>Bahrain</item> <item>Bangladesh</item> <item>Barbados</item> <item>Belarus</item> <item>Belgium</item> <item>Belize</item> <item>Benin</item> <item>Bermuda</item> <item>Bhutan</item> <item>Bolivia</item> <item>Bosnia and Herzegovina</item> <item>Botswana</item> <item>Bouvet Island</item> <item>Brazil</item> <item>British Indian Ocean Territory</item> <item>British Virgin Islands</item> <item>Brunei</item> <item>Bulgaria</item> <item>Burkina Faso</item> <item>Burundi</item> <item>Cambodia</item> <item>Cameroon</item> <item>Canada</item> <item>Cape Verde</item> <item>Cayman Islands</item> <item>Central African Republic</item> <item>Chad</item> <item>Chile</item> <item>China</item> <item>Christmas Island</item> <item>Cocos (Keeling) Islands</item> <item>Colombia</item> <item>Comoros</item> <item>Congo</item> <item>Cook Islands</item> <item>Costa Rica</item> <item>Cote d'Ivoire</item> <item>Croatia</item> <item>Cuba</item> <item>Cyprus</item> <item>Czech Republic</item> <item>Democratic Republic of the Congo</item> <item>Denmark</item> <item>Djibouti</item> <item>Dominica</item> <item>Dominican Republic</item> <item>East Timor</item> <item>Ecuador</item> <item>Egypt</item> <item>El Salvador</item> <item>Equatorial Guinea</item> <item>Eritrea</item> <item>Estonia</item> <item>Ethiopia</item> <item>Faeroe Islands</item> <item>Falkland Islands</item> <item>Fiji</item> <item>Finland</item> <item>Former Yugoslav Republic of Macedonia</item> <item>France</item> <item>French Guiana</item> <item>French Polynesia</item> <item>French Southern Territories</item> <item>Gabon</item> <item>Georgia</item> <item>Germany</item> <item>Ghana</item> <item>Gibraltar</item> <item>Greece</item> <item>Greenland</item> <item>Grenada</item> <item>Guadeloupe</item> <item>Guam</item> <item>Guatemala</item> <item>Guinea</item> <item>Guinea-Bissau</item> <item>Guyana</item> <item>Haiti</item> <item>Heard Island and McDonald Islands</item> <item>Honduras</item> <item>Hong Kong</item> <item>Hungary</item> <item>Iceland</item> <item>India</item> <item>Indonesia</item> <item>Iran</item> <item>Iraq</item> <item>Ireland</item> <item>Israel</item> <item>Italy</item> <item>Jamaica</item> <item>Japan</item> <item>Jordan</item> <item>Kazakhstan</item> <item>Kenya</item> <item>Kiribati</item> <item>Kuwait</item> <item>Kyrgyzstan</item> <item>Laos</item> <item>Latvia</item> <item>Lebanon</item> <item>Lesotho</item> <item>Liberia</item> <item>Libya</item> <item>Liechtenstein</item> <item>Lithuania</item> <item>Luxembourg</item> <item>Macau</item> <item>Madagascar</item> <item>Malawi</item> <item>Malaysia</item> <item>Maldives</item> <item>Mali</item> <item>Malta</item> <item>Marshall Islands</item> <item>Martinique</item> <item>Mauritania</item> <item>Mauritius</item> <item>Mayotte</item> <item>Mexico</item> <item>Micronesia</item> <item>Moldova</item> <item>Monaco</item> <item>Mongolia</item> <item>Montenegro</item> <item>Montserrat</item> <item>Morocco</item> <item>Mozambique</item> <item>Myanmar</item> <item>Namibia</item> <item>Nauru</item> <item>Nepal</item> <item>Netherlands</item> <item>Netherlands Antilles</item> <item>New Caledonia</item> <item>New Zealand</item> <item>Nicaragua</item> <item>Niger</item> <item>Nigeria</item> <item>Niue</item> <item>Norfolk Island</item> <item>North Korea</item> <item>Northern Marianas</item> <item>Norway</item> <item>Oman</item> <item>Pakistan</item> <item>Palau</item> <item>Panama</item> <item>Papua New Guinea</item> <item>Paraguay</item> <item>Peru</item> <item>Philippines</item> <item>Pitcairn Islands</item> <item>Poland</item> <item>Portugal</item> <item>Puerto Rico</item> <item>Qatar</item> <item>Reunion</item> <item>Romania</item> <item>Russia</item> <item>Rwanda</item> <item>Sqo Tome and Principe</item> <item>Saint Helena</item> <item>Saint Kitts and Nevis</item> <item>Saint Lucia</item> <item>Saint Pierre and Miquelon</item> <item>Saint Vincent and the Grenadines</item> <item>Samoa</item> <item>San Marino</item> <item>Saudi Arabia</item> <item>Senegal</item> <item>Serbia</item> <item>Seychelles</item> <item>Sierra Leone</item> <item>Singapore</item> <item>Slovakia</item> <item>Slovenia</item> <item>Solomon Islands</item> <item>Somalia</item> <item>South Africa</item> <item>South Georgia and the South Sandwich Islands</item> <item>South Korea</item> <item>South Sudan</item> <item>Spain</item> <item>Sri Lanka</item> <item>Sudan</item> <item>Suriname</item> <item>Svalbard and Jan Mayen</item> <item>Swaziland</item> <item>Sweden</item> <item>Switzerland</item> <item>Syria</item> <item>Taiwan</item> <item>Tajikistan</item> <item>Tanzania</item> <item>Thailand</item> <item>The Bahamas</item> <item>The Gambia</item> <item>Togo</item> <item>Tokelau</item> <item>Tonga</item> <item>Trinidad and Tobago</item> <item>Tunisia</item> <item>Turkey</item> <item>Turkmenistan</item> <item>Turks and Caicos Islands</item> <item>Tuvalu</item> <item>Virgin Islands</item> <item>Uganda</item> <item>Ukraine</item> <item>United Arab Emirates</item> <item>United Kingdom</item> <item>United States</item> <item>United States Minor Outlying Islands</item> <item>Uruguay</item> <item>Uzbekistan</item> <item>Vanuatu</item> <item>Vatican City</item> <item>Venezuela</item> <item>Vietnam</item> <item>Wallis and Futuna</item> <item>Western Sahara</item> <item>Yemen</item> <item>Yugoslavia</item> <item>Zambia</item> <item>Zimbabwe</item> </string-array> </resources>
Next create a drawable file to be used as the tags background. square_default.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" /> <solid android:color="@color/bg_tag_default" /> </shape>
Go into your activity_main.xml and edit the layout as such: activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:TagsEditText="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_awidth="match_parent" android:layout_height="match_parent" android:padding="10dp" android:background="@android:color/black" tools:context="com.example.framgiababatundefatoyesunday.tagedittextapp.MainActivity" > <mabbas007.tagsedittext.TagsEditText android:id="@+id/tagsEditText" android:layout_awidth="match_parent" android:layout_height="wrap_content" TagsEditText:tagsBackground="@drawable/square_default" TagsEditText:tagsCloseImageRight="@drawable/tag_close" android:textColor="@android:color/white" android:textSize="16sp" app:tagsTextSize="16sp" /> <Button android:layout_awidth="match_parent" android:layout_height="wrap_content" android:text="@string/done" android:layout_alignParentBottom="true" /> </RelativeLayout>
The (mabbas007.tagsedittext.TagsEditText) is the custom edittext and it support custom xml and java properties that can make tagging much more easier. Below are some of the properties.
- TagsEditText:tagsBackground: Will set the background of the tags
- TagsEditText:tagsCloseImageRight: To set a drawable image (on the right usually to delete a tag)
- app:tagsTextSize sets the tag text size
MainActivity
package com.example.framgiababatundefatoyesunday.tagedittextapp; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Toast; import java.util.ArrayList; import java.util.Collection; import mabbas007.tagsedittext.TagsEditText; public class MainActivity extends AppCompatActivity implements TagsEditText.TagsEditListener { private ArrayAdapter arrayAdapter; private TagsEditText mTagsEditText; private Button mBtnDone; private Collection<String> mCollection = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTagsEditText = (TagsEditText) findViewById(R.id.tagsEditText); mBtnDone = (Button) findViewById(R.id.btnDone); mBtnDone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mCollection == null || mCollection.isEmpty()) { Toast.makeText(MainActivity.this, "Empty", Toast.LENGTH_SHORT).show(); return; } for (String country : mCollection) Toast.makeText(MainActivity.this, country, Toast.LENGTH_SHORT).show(); } }); mTagsEditText.setHint("Enter names of country"); mTagsEditText.setTagsListener(this); //To Disable space click (Adds text to tags) // mTagsEditText.setTagsWithSpacesEnabled(true); arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, getResources().getStringArray(R.array.country)); mTagsEditText.setAdapter(arrayAdapter); mTagsEditText.setThreshold(1); } @Override public void onTagsChanged(Collection<String> collection) { mCollection = collection; } @Override public void onEditingFinished() { } }
The advantage of using this library is that all tags are treated as a single individual objects and not strings. It can easily be deleted and modified to keep user from inputing unnecessary texts. More info can be found on the official git here