如何在android google地方的自动完成活动中更改占位符文本?

时间:2017-07-28 06:08:56

标签: android google-places-api

我正在使用Option 2: Use an intent to launch the autocomplete activity

是否可以将“搜索”占位符文本更改为“输入您的城市”等内容。我发现a solution但是对于javascript,假设支持android也是如此。

似乎可以使用a PlaceAutocompleteFragment完成,但我使用自己的EditText通过使用intent启动自动完成,因此没有用处。

enter image description here

9 个答案:

答案 0 :(得分:6)

没有办法,如果你想要,你必须创建自己的。 但是当你使用EditText(在评论部分中提到)时,这种技术可能对你有用。

代码:

PlaceAutocompleteFragment autocompleteFragment;
autocompleteFragment = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
    autocompleteFragment.setOnPlaceSelectedListener(this);
    autocompleteFragment.setHint("Search New Location");

XMl:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/left_drawable_padding"
android:layout_marginTop="@dimen/margin_five"
android:layout_marginLeft="@dimen/margin_five"
android:layout_marginRight="@dimen/margin_five"
android:background="@drawable/search_background"
android:orientation="vertical">
    <fragment
        android:id="@+id/place_autocomplete_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        />

当我使用android:background="@drawable/search_background"时,你必须创建自己的背景形状(根据你的需要)。

第一张图片: enter image description here

第二张图片: enter image description here

第三张图片: enter image description here

第四张图: enter image description here

答案 1 :(得分:2)

不幸的是,无法使用自动完成意图更改提示文本。 您需要制作自己的小部件,例如PlaceAutocompleteFragment。

答案 2 :(得分:1)

似乎无法使用自动完成活动或使用PlaceAutocompleteFragment更改占位符文本,因为它还使用自动完成活动。唯一的方法是使用AutoCompleteTextView,您可以完全控制它。 Google提供的完整示例代码也易于集成并提供良好的用户体验。

https://github.com/googlesamples/android-play-places/tree/master/PlaceCompleteAdapter

我创建了一个功能请求here,希望将来能够支持它。

答案 3 :(得分:1)

    //places auto complete

    String apiKey = getString(R.string.api_key);

    /**
     * Initialize Places. For simplicity, the API key is hard-coded. In a production
     * environment we recommend using a secure mechanism to manage API keys.
     */
    if (!Places.isInitialized()) {
        Places.initialize(getApplicationContext(), apiKey);
    }

// 创建一个新的 Places 客户端实例。 PlacesClient placeClient = Places.createClient(this);

    // Initialize the AutocompleteSupportFragment.
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG));
    autocompleteFragment.setHint("Set Drop off");

答案 4 :(得分:0)

这是你要找的吗?

SearchView searchView = (SearchView) 
menu.findItem(R.id.menu_search).getActionView();
searchView.setQueryHint("Your text");

答案 5 :(得分:0)

您可以通过两种方式实现Google地方功能: 1.。使用PlaceAutocomplete.IntentBuilder 2.。使用PlaceAutocompleteFragment

案例1:

      private void openPlacesSearch()
{
private static final int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1001;

        try {
                            Intent intent =
                                    new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                                            .zzih("Enter pickup location") //set the hint text here
                                            .build(this);

                            startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
                        }
                        catch (GooglePlayServicesRepairableException e) {
                            // TODO: Handle the error.
                        } catch (GooglePlayServicesNotAvailableException e) {
                            // TODO: Handle the error.
                        }
}

案例2: a。)创建一个名为“AddressSelectActivity.java”的新Activity b。)不要忘记在manifest.xml中定义该活动

以下是以下代码:

public class AddressSelectActivity extends Activity {

    private static final String TAG = AddressSelectActivity.class.getSimpleName();
    private static final int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1001;
    private PlaceAutocompleteFragment autocompleteFragment;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_address_select);
        addAddressSuggestionListener();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode)
        {
            case PLACE_AUTOCOMPLETE_REQUEST_CODE:

                if (resultCode == RESULT_OK) {
                    Place place = PlaceAutocomplete.getPlace(this, data);
                    Log.i(TAG, "Place: " + place.getName());

                    LatLng latLng = place.getLatLng();

                } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
                    Status status = PlaceAutocomplete.getStatus(this, data);
                    // TODO: Handle the error.
                    Log.i(TAG, status.getStatusMessage());

                } else if (resultCode == RESULT_CANCELED) {
                    // The user canceled the operation.
                }

                break;
            default:
                break;
        }
    }

    private void addAddressSuggestionListener()
    {
        autocompleteFragment = (PlaceAutocompleteFragment)
                getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setHint("Search Your Location...");

        autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // TODO: Get info about the selected place.
                Log.i(TAG, "Place: " + place.getName());
            }

            @Override
            public void onError(Status status) {
                // TODO: Handle the error.
                Log.i(TAG, "An error occurred: " + status);
            }
        });
    }
}

答案 6 :(得分:0)

是的,有可能,这样做

EditText et = (EditText)findViewById(R.id.place_autocomplete_search_input);
    et.setHint("enter your city");

答案 7 :(得分:0)

如果使用自动完成的文本视图,请在布局控件上使用setHint,并且左上角的标题和提示文本都将更新。如果仅更新包含的编辑视图,则左上角的标题将保持不变。

答案 8 :(得分:0)

在新的Autocomplete.IntentBuilder中,您可以覆盖strings.xml文件中的提示字符串。

<string name="places_autocomplete_search_hint">SOME HINT TEXT</string>

但是,我尚未在旧的PlaceAutocomplete.IntentBuilder上对其进行测试。