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

elcex8rz  于 2023-01-07  发布在  Android
关注(0)|答案(9)|浏览(122)

我使用选项2:使用Intent启动自动完成活动
有没有可能把“搜索”保持器文本改成“输入你的城市”之类的东西。我找到了一个解决方案,但对于JavaScript,假设也支持Android。
看起来它可以用a PlaceAutocompleteFragment完成,但是我使用自己的EditText通过使用Intent来启动自动完成,所以它没有帮助。

lztngnrs

lztngnrs1#

你可以这样做:-

val autocompleteFragment = supportFragmentManager.findFragmentById(R.id.autocomplete_fragment)
                      as AutocompleteSupportFragment

autocompleteFragment.setHint("Search New Location")
idv4meu8

idv4meu82#

这就是你要找的吗

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

qhhrdooz3#

你可以通过两种方式实现google places的功能:* * 1.)通过使用PlaceAutocomplate.IntentBuilder****2.)通过使用放置自动完成片段**

    • 情况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.
                        }
}

**CASE 2:**a.) Create a new Activity named "AddressSelectActivity.java" b.) Don't forget to define that activity in 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);
            }
        });
    }
}
rsaldnfx

rsaldnfx4#

如果您使用的是自动完成文本视图,请在布局控件上使用setHint,左上角的标题和提示文本都将更新。如果您只更新包含的编辑视图,左上角的标题将不会更改。

xuo3flqw

xuo3flqw5#

是的,这是可能的,这样做

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

ovfsdjhp6#

不,没有办法,如果你想的话,你必须创建你自己的。但是当你使用编辑文本(在评论部分提到)时,这种技术可能对你有用。
代码:

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",所以你必须创建自己的背景形状(根据你的需要)。
第一张图片:

第二张图片:

第三张图片:

第四张图片:

lrpiutwd

lrpiutwd7#

不幸的是,没有办法用自动完成Intent更改提示文本,您需要创建自己的小部件,如PlaceAutocompleteFragment。

woobm2wo

woobm2wo8#

似乎没有办法改变占位符文本与自动完成活动,甚至与PlaceAutocompleteFragment,因为它也使用自动完成活动内。唯一的办法是使用AutoCompleteTextView,你有完全控制它。谷歌提供了完整的示例代码,也很容易集成,并提供良好的用户体验。
https://github.com/googlesamples/android-play-places/tree/master/PlaceCompleteAdapter
我创建了一个特性请求here,希望将来能支持它。

ar7v8xwq

ar7v8xwq9#

//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 placesClient = 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");

相关问题