Android

안드로이드 구글맵 검색

Machine_웅 2018. 4. 28. 17:01
728x90
반응형
덜지 2017.05.19 18:11

Fragment에 구현된 구글 맵에 자동완성검색 위젯을 추가해보도록 하겠습니다.










1. 구글 맵 위에 위젯 올리기


2. 위젯 리스너 추가하기


3. 결과값에 마커 표시하기


위 순서로 진행하겠습니다.




fragment_fragment1.xml


프래그먼트에는 테두리나 배경이 없습니다. 그래서 시각적 모양을 보여주려면, 또다른 레아웃 요소 내에 프래그먼트를 중첩시켜줘야 합니다. 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000">
 
    <!-- Activity에서는 fragment로 구현해야되지만
    Fragment로 구현하기위해서는 MapView를 사용해야함-->
    <com.google.android.gms.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.google.android.gms.maps.MapFragment"
        />
 
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:name="@+id/card_view"
        android:layout_width="400dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        card_view:cardCornerRadius="4dp"
        >
        <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"
            >
        </fragment>
 
    </android.support.v7.widget.CardView>
 
 
</RelativeLayout>

Activity에 올리는 경우는 아래 코드만 xml에 넣으시면 됩니다.


<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"
 
/>



위에서 사용한 CardView의 특징을 간략하게 살펴보겠습니다.


CardView는 FrameLayout 클래스를 확장하고 카드 내의 정보를 플랫폼에서 일관된 모습으로 표시할 수 있도록 합니다. 

CardView위젯은 그림자와 둥근 모서리를 가질 수 있습니다.

  • 레이아웃에 모서리 반지름을 사용하려면 card_view:cardCornerRadius 특성을 사용합니다.
  • 코드에서 모서리 반지름을 설정하려면 CardView.setRadius를 사용합니다
  • 카드의 배경색을 설정하려면 card_view:cardBackgroundColor 특성을 사용합니다.
CardView 위젯은 v7 지원 라이브러리의 일부이기때문에 프로젝트에서 사용하려면 Gradle 종석성을 추가해야합니다

dependencies {
   
...
    compile
'com.android.support:cardview-v7:21.0.+'
}



위의 코드를 쓰시면서 CardView 클래스를 찾을 수 없다는 에러 메시지가 출력된다면 



 compile 'com.android.support:cardview-v7:사용중인버전'  을 Gradle ( 모듈 )에 추가하시면 됩니다.

 


// 구글 지도 검색 API
implementation 'com.google.android.gms:play-services-places:15.0.0'

// 카드뷰
compile 'com.android.support:cardview-v7:26.1.0'






Fragment1.java


나머지 코드는 이전에 만든것들과 동일하며 onCreateView만 코드를 추가하면 됩니다.


PlaceAutocompleteFragment 객체를 생성하고 핸들을 연결합니다.

그리고 결과값 선택 리스너를 추가합니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View layout = inflater.inflate(R.layout.fragment_fragment1, container, false);
 
    mapView = (MapView)layout.findViewById(R.id.map);
    mapView.getMapAsync(this);
 
    PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
            getActivity().getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
 
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            Location location = new Location("");
            location.setLatitude(place.getLatLng().latitude);
            location.setLongitude(place.getLatLng().longitude);
 
            setCurrentLocation(location, place.getName().toString(), place.getAddress().toString());
        }
 
        @Override
        public void onError(Status status) {
            Log.i(TAG, "An error occurred: " + status);
        }
    });
 
    return layout;
}


 



출처: http://duzi077.tistory.com/125 [개발하는 두더지]

출처: http://duzi077.tistory.com/125 [개발하는 두더지]

 

728x90
반응형