繁体   English   中英

Google Places autoelete想要下面的图像链接视图吗? 希望标题为粗体,描述为小

[英]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.getPrimaryTextAutocompletePrediction.getSecondaryText (而不是getDescription )来获取预测的两个部分,并对主要文本加粗。

Google的PlaceCompleteAdapter示例演示了如何使用这些方法,并以不同的样式呈现主要文本和辅助文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM