我正在使用Option 2: Use an intent to launch the autocomplete activity
是否可以将“搜索”占位符文本更改为“输入您的城市”等内容。我发现a solution但是对于javascript,假设支持android也是如此。
似乎可以使用a PlaceAutocompleteFragment完成,但我使用自己的EditText通过使用intent启动自动完成,因此没有用处。
答案 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"
时,你必须创建自己的背景形状(根据你的需要)。
答案 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上对其进行测试。