![](/img/trans.png)
[英]I want to open a url using inbuilt Android system web view like the below image
[英]Google places autocompelete want a view like below image link ? Want header as bold and description as small
可能有重复,但是没有解决方案。 ![google放置自动完成功能] http://prntscr.com/9pybsx我想将标题设为小写的粗体和说明。 我也试图使字符串的一部分变为粗体并返回它,尽管它不起作用。 帮我。 提前致谢。 以下是我在适配器中用于返回文本的代码。
public class PlaceArrayAdapter
extends ArrayAdapter<PlaceArrayAdapter.PlaceAutocomplete> implements Filterable {
private static final String TAG = "PlaceArrayAdapter";
private GoogleApiClient mGoogleApiClient;
private AutocompleteFilter mPlaceFilter;
private LatLngBounds mBounds;
private ArrayList<PlaceAutocomplete> mResultList;
/**
* Constructor
*
* @param context Context
* @param resource Layout resource
* @param bounds Used to specify the search bounds
* @param filter Used to specify place types
*/
public PlaceArrayAdapter(Context context, int resource,int id, LatLngBounds bounds,
AutocompleteFilter filter) {
super(context, resource,id);
mBounds = bounds;
mPlaceFilter = filter;
}
public void setGoogleApiClient(GoogleApiClient googleApiClient) {
if (googleApiClient == null || !googleApiClient.isConnected()) {
mGoogleApiClient = null;
} else {
mGoogleApiClient = googleApiClient;
}
}
@Override
public int getCount() {
return mResultList.size();
}
@Override
public PlaceAutocomplete getItem(int position) {
return mResultList.get(position);
}
private ArrayList<PlaceAutocomplete> getPredictions(CharSequence constraint) {
if (mGoogleApiClient != null) {
Log.i(TAG, "Executing autocomplete query for: " + constraint);
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
mBounds, mPlaceFilter);
// Wait for predictions, set the timeout.
AutocompletePredictionBuffer autocompletePredictions = results
.await(60, TimeUnit.SECONDS);
final Status status = autocompletePredictions.getStatus();
if (!status.isSuccess()) {
Toast.makeText(getContext(), "Error: " + status.toString(),
Toast.LENGTH_SHORT).show();
Log.e(TAG, "Error getting place predictions: " + status
.toString());
autocompletePredictions.release();
return null;
}
Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
+ " predictions.");
Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());
while (iterator.hasNext()) {
AutocompletePrediction prediction = iterator.next();
resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
prediction.getDescription()));
}
// Buffer release
autocompletePredictions.release();
return resultList;
}
Log.e(TAG, "Google API client is not connected.");
return null;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null) {
// Query the autocomplete API for the entered constraint
mResultList = getPredictions(constraint);
if (mResultList != null) {
// Results
results.values = mResultList;
results.count = mResultList.size();
}
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
// The API returned at least one result, update the data.
notifyDataSetChanged();
} else {
// The API did not return any results, invalidate the data set.
notifyDataSetInvalidated();
}
}
};
return filter;
}
class PlaceAutocomplete {
public CharSequence placeId;
public CharSequence description;
PlaceAutocomplete(CharSequence placeId, CharSequence description) {
this.placeId = placeId;
this.description = description;
}
@Override
public String toString() {
CharSequence cs1 = ",";
String res="",res1="";
if(description.toString().contains(cs1)) {
String animals_list[] = description.toString().split(",");
// res = "<big><strong> "+animals_list[0]+ "</strong></big>"+"<br/>".toString() ;
res=animals_list[0];
for (int i = 1; i < animals_list.length; i++) {
res1 = res1 + animals_list[i]+",";
}
final SpannableStringBuilder str = new SpannableStringBuilder(res);
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0,animals_list[0].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//SpannableStringBuilder sb = new SpannableStringBuilder(res);
// create a bold StyleSpan to be used on the SpannableStringBuilder
// StyleSpan b = new StyleSpan(android.graphics.Typeface.BOLD); // Span to make text bold
// set only the name part of the SpannableStringBuilder to be bold --> 16, 16 + name.length()
// sb.setSpan(b, 0,animals_list[0].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // make first 4 characters Bold
// Spanned sb= Html.fromHtml(res);
return Html.fromHtml("<b>"+res+"</b> <br/>"+res1).toString();
}
else
{
return description.toString();
}
}
}
}
这是我如何使用自定义布局
AutoCompleteTextView tv_location = (AutoCompleteTextView) view.findViewById(R.id.tv_location);
tv_location.setAdapter(new GooglePlacesAutocompleteAdapter(getActivity(), R.layout.list_item));
这是Adapter类
class GooglePlacesAutocompleteAdapter extends ArrayAdapter implements Filterable {
private ArrayList resultList;
public GooglePlacesAutocompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public String getItem(int index) {
String selectedtext = resultList.get(index).toString();
bloodRequestBean.setAddress(selectedtext);
return resultList.get(index).toString();
}
@Override
public Filter getFilter() {
Filter filter;
filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(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;
}
}
这是自动完成方法
public ArrayList autocomplete(String input) {
ArrayList results = new ArrayList<>();
AppSharedPreference appSharedPreference;
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
appSharedPreference = AppSharedPreference.getsharedprefInstance(getActivity());
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&location=" + appSharedPreference.getLatitude() + "," + appSharedPreference.getLongitude());
sb.append("&radius=50000");
sb.append("&components=country:in");
// sb.append("&types=hospital");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
URL url = new URL(sb.toString());
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
// Load the results into a StringBuilder
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1) {
jsonResults.append(buff, 0, read);
}
} catch (MalformedURLException e) {
// Log.e(LOG_TAG, "Error processing Places API URL", e);
return results;
} catch (IOException e) {
// Log.e(LOG_TAG, "Error connecting to Places API", e);
return results;
} finally {
if (conn != null) {
conn.disconnect();
}
}
try {
// Create a JSON object hierarchy from the results
JSONObject jsonObj = new JSONObject(jsonResults.toString());
JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");
// Extract the Place descriptions from the results
results = new ArrayList(predsJsonArray.length());
for (int i = 0; i < predsJsonArray.length(); i++) {
String name = predsJsonArray.getJSONObject(i).getString("description");
// String place_id=predsJsonArray.getJSONObject(i).getString("place_id");
if (name.contains("hospitals") || name.contains("hospital") || name.contains("Hospitals") || name.contains("Hospital") || name.contains("Clinic") || name.contains("clinic")
|| name.contains("Clinics") || name.contains("clinics") || name.contains("Medical") || name.contains("Medicals") || name.contains("medical") || name.contains("medicals") || name.contains("Blood Bank")
|| name.contains("Maternity") || name.contains("maternity") || name.contains("Nursing") || name.contains("nursing"))
results.add(predsJsonArray.getJSONObject(i).getString("description"));
}
} catch (JSONException e) {
// Log.e(LOG_TAG, "Cannot process JSON results", e);
}
return results;
}
这是自定义xml(尽管只有一行)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/tv_hospital" />
使用AutocompletePrediction.getPrimaryText
和AutocompletePrediction.getSecondaryText
(而不是getDescription
)来获取预测的两个部分,并对主要文本加粗。
Google的PlaceCompleteAdapter示例演示了如何使用这些方法,并以不同的样式呈现主要文本和辅助文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.