Android 使用 PlaceAutoCompleteActivity(Google 地点 API)
Android using PlaceAutoCompleteActivity (Google Places API)
我已经举了一个非常简单的例子来说明我遇到的 PlaceAutoCompelteActivity
问题。我的地图将显示在屏幕上,顶部还有 2 个文本搜索栏。问题是,一旦我在文本视图中单击,就会出现一个键盘,文本视图中的光标将 blink (如预期的那样),但是在我键入第一个字母后(如果我快速键入我可以获得 2中的字母),键盘将消失,搜索框将变为空白,光标将消失(return 到预单击状态。)这是文档的 link:
https://developers.google.com/places/android-api/autocomplete?hl=en
简单 activity 和 xml 文件的代码如下:
java activity:
package com.blah.android.backseatbuddy;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import com.google.android.gms.location.places.ui.PlaceSelectionListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class RouteActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
// private EditText beginningDestination;
// private EditText endingDestination;
PlaceAutocompleteFragment beginningDestination;
PlaceAutocompleteFragment endingDestination;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route);
beginningDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.beginning_destination);
beginningDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i("beginningDestination ", "Place: " + place.getName());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i("beginningDestination ", "An error occurred: " + status);
}
});
endingDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.ending_destination);
endingDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i("endingDestination ", "Place: " + place.getName());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i("endingDestination ", "An error occurred: " + status);
}
});
// beginningDestination = (EditText) findViewById(R.id.beginning_destination);
// endingDestination = (EditText) findViewById(R.id.ending_destination);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
和xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/relativeLayoutFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/beginning_destination"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
<fragment
android:id="@+id/ending_destination"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.greg.android.backseatbuddy.RouteActivity"/>
</LinearLayout>
您可能需要插入您自己的 API 密钥(如果您还没有这样做),可以通过 Google 开发人员控制台获取。
详情在这里:
https://developers.google.com/places/android-api/signup?hl=en
此外,在 Google 开发人员控制台中,将 Google Places API 添加到项目中已启用 API 的列表中。
我已经举了一个非常简单的例子来说明我遇到的 PlaceAutoCompelteActivity
问题。我的地图将显示在屏幕上,顶部还有 2 个文本搜索栏。问题是,一旦我在文本视图中单击,就会出现一个键盘,文本视图中的光标将 blink (如预期的那样),但是在我键入第一个字母后(如果我快速键入我可以获得 2中的字母),键盘将消失,搜索框将变为空白,光标将消失(return 到预单击状态。)这是文档的 link:
https://developers.google.com/places/android-api/autocomplete?hl=en
简单 activity 和 xml 文件的代码如下:
java activity:
package com.blah.android.backseatbuddy;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import com.google.android.gms.location.places.ui.PlaceSelectionListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class RouteActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
// private EditText beginningDestination;
// private EditText endingDestination;
PlaceAutocompleteFragment beginningDestination;
PlaceAutocompleteFragment endingDestination;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route);
beginningDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.beginning_destination);
beginningDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i("beginningDestination ", "Place: " + place.getName());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i("beginningDestination ", "An error occurred: " + status);
}
});
endingDestination = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.ending_destination);
endingDestination.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i("endingDestination ", "Place: " + place.getName());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i("endingDestination ", "An error occurred: " + status);
}
});
// beginningDestination = (EditText) findViewById(R.id.beginning_destination);
// endingDestination = (EditText) findViewById(R.id.ending_destination);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
和xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/relativeLayoutFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/beginning_destination"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
<fragment
android:id="@+id/ending_destination"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
/>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.greg.android.backseatbuddy.RouteActivity"/>
</LinearLayout>
您可能需要插入您自己的 API 密钥(如果您还没有这样做),可以通过 Google 开发人员控制台获取。 详情在这里: https://developers.google.com/places/android-api/signup?hl=en 此外,在 Google 开发人员控制台中,将 Google Places API 添加到项目中已启用 API 的列表中。