1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker arg0) { return null; } @Override public View getInfoContents(Marker marker) { Context context = getApplicationContext(); //or getActivity(), YourActivity.this, etc. LinearLayout info = new LinearLayout(context); info.setOrientation(LinearLayout.VERTICAL); TextView title = new TextView(context); title.setTextColor(Color.BLACK); title.setGravity(Gravity.CENTER); title.setTypeface(null, Typeface.BOLD); title.setText(marker.getTitle()); TextView snippet = new TextView(context); snippet.setTextColor(Color.GRAY); snippet.setText(marker.getSnippet()); info.addView(title); info.addView(snippet); return info; } }); |
Monday, July 18, 2016
Android Google Map Multiple Line Snippet on Info Window
Friday, July 1, 2016
Android AutoCompleteTextView Geocoder
main_layout.xml
MainActivity.java
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity"> <AutoCompleteTextView android:id="@+id/text1" android:layout_width="280dp" android:layout_height="wrap_content" android:textSize="15dp"/> </LinearLayout>
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | AutoCompleteTextView text1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); text1 = (AutoCompleteTextView ) findViewById(R.id.text1); text1.setThreshold(3); text1.setAdapter(new CustomAdapter(this,android.R.layout.simple_list_item_1)); } private ArrayList<String> getAddressInfo(String locationName) { ArrayList<String> list = new ArrayList<>(); Geocoder geocoder = new Geocoder(this, Locale.getDefault()); try { List<Address> a = geocoder.getFromLocationName(locationName, 5); for (int i = 0; i < a.size(); i++) { String city = a.get(i).getLocality(); String country = a.get(i).getCountryName(); String address = a.get(i).getAddressLine(0); list.add(address +(city!=null?", " + city :"") +(country!=null? ", " + country:"") ); } } catch (IOException e) { e.printStackTrace(); } return list; } class CustomAdapter extends ArrayAdapter implements Filterable { private ArrayList<String> resultList; public CustomAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); } @Override public int getCount() { return resultList.size(); } @Override public String getItem(int index) { return resultList.get(index); } @Override public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); if (constraint != null) { // Retrieve the autocomplete results. resultList = getAddressInfo(constraint.toString()); // Assign the data to the FilterResults filterResults.values = resultList; filterResults.count = resultList.size(); } return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results != null && results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; return filter; } } |
Tuesday, May 3, 2016
Android Fast Unzip Programatically
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import android.util.Log; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * @credit http://stackoverflow.com/a/21159437/1730484 */ public class Decompress { private String _zipFile; private String _location; public interface DecompressListener { public void onFinish(String zipfile); } public Decompress(String zipFile, String location) { _zipFile = zipFile; _location = location; hanldeDirectory(""); } public void unzip(DecompressListener listener) { try { FileInputStream inputStream = new FileInputStream(_zipFile); ZipInputStream zipStream = new ZipInputStream(inputStream); ZipEntry zEntry = null; while ((zEntry = zipStream.getNextEntry()) != null) { Log.d("Unzip", "Unzipping " + zEntry.getName() + " at " + _location); if (zEntry.isDirectory()) { hanldeDirectory(zEntry.getName()); } else { FileOutputStream fout = new FileOutputStream( this._location + "/" + zEntry.getName()); BufferedOutputStream bufout = new BufferedOutputStream(fout); byte[] buffer = new byte[1024]; int read = 0; while ((read = zipStream.read(buffer)) != -1) { bufout.write(buffer, 0, read); } zipStream.closeEntry(); bufout.close(); fout.close(); } } zipStream.close(); Log.d("Unzip", "Unzipping complete. path : " + _location); } catch (Exception e) { Log.d("Unzip", "Unzipping failed"); e.printStackTrace(); } finally { if (listener != null) listener.onFinish(_zipFile); } } public void hanldeDirectory(String dir) { File f = new File(this._location + dir); if (!f.isDirectory()) { f.mkdirs(); } } } |
Monday, April 25, 2016
Gradle Jar with Depedencies
jar {
manifest {
attributes "Main-Class": "your.java.application.class.Main"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Subscribe to:
Comments (Atom)