2017-06-01 84 views
1

我試圖在線性佈局內實現MapView,並且此佈局不屬於MapActivity。另外我沒有使用fragment來實現這個過程。Android:如何在不使用地圖活動的情況下實現com.google.android.gms.maps.MapView

另外,我從Google Developer Console獲得了api密鑰,並啓用了與地理位置和地圖相關的一些apis。

這是我在Android Studio中的Android清單,

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="sec.asdf_solutions.biz.security"> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/logo" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <uses-library android:name="com.google.android.maps" /> 

     <activity android:name=".SplashScreenActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LoginActivity"></activity> 
     <activity 
      android:name=".RosterActivity" 
      android:configChanges="locale" 
      android:label="" 
      android:theme="@style/AppTheme.Light" /> 

     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" />   

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="@string/api_key" />   

    </application> 

</manifest> 

這是我佈局文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/content_roster_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="5dp" 
    android:layout_marginTop="3dp" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context=".RosterActivity" 
    tools:showIn="@layout/app_bar_roster"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp" 
      android:orientation="vertical"> 

      <com.google.android.gms.maps.MapView 
       android:id="@+id/roster_map_view" 
       android:layout_width="match_parent" 
       android:layout_height="300dp" 
       android:apiKey="xxx--yyy-zzz-aaa-www" 
       android:layout_weight="1"/> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/roster_map_view" 
       android:layout_marginTop="4dp" 
       android:layout_marginBottom="15dp" 
       android:alpha="0.5" 
       android:background="#765491" 
       android:orientation="vertical"> 

       <TextView 
        android:id="@+id/roster_ac_date_text" 
        android:layout_width="match_parent" 
        android:layout_height="36dp" 
        android:layout_gravity="center" 
        android:background="#563e6b" 
        android:paddingTop="5dp" 
        android:paddingBottom="5dp" 
        android:text="5 th MAY 2017" 
        android:textStyle="bold" 
        android:textAlignment="center" 
        android:textColor="@android:color/white" 
        android:textSize="22sp" /> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:orientation="horizontal"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:text="START TIME" 
         android:textStyle="bold" 
         android:textAlignment="center" 
         android:textColor="@android:color/white" 
         android:textSize="14sp" /> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:text="END TIME" 
         android:textStyle="bold" 
         android:textAlignment="center" 
         android:textColor="@android:color/white" 
         android:textSize="14sp" /> 

       </LinearLayout> 


       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:id="@+id/roster_st_time_text" 
         android:text="08.30 AM" 
         android:textStyle="bold" 
         android:textAlignment="center" 
         android:textColor="@android:color/white" 
         android:textSize="20sp" /> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="1" 
         android:id="@+id/roster_ed_time_text" 
         android:text="05.30 PM" 
         android:textStyle="bold" 
         android:textAlignment="center" 
         android:textColor="@android:color/white" 
         android:textSize="20sp" /> 

       </LinearLayout> 


       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/roster_location_text" 
        android:layout_marginRight="35dp" 
        android:layout_marginLeft="35dp" 
        android:layout_marginTop="8dp" 
        android:drawablePadding="5dp" 
        android:drawableLeft="@drawable/ic_place_small" 
        android:textAlignment="center" 
        android:maxLines="3" 
        android:lines="3" 
        android:clickable="true" 
        android:textSize="14sp" 
        android:text="Australian Strategic Partnership\n#9, School Lane, Kollpity, Colombo 3" 
        android:textColor="@android:color/white" /> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="18dp" 
        android:orientation="horizontal"> 

        <android.support.v7.widget.AppCompatButton 
         android:id="@+id/roster_accept_btn" 
         style="@style/ButtonStyle" 
         android:layout_height="32dp" 
         android:background="@color/loginColor" 
         android:layout_marginBottom="10dp" 
         android:layout_marginLeft="10dp" 
         android:layout_marginRight="40dp" 
         android:textSize="16sp" 
         android:textStyle="bold" 
         android:layout_weight="1" 
         android:clickable="true" 
         android:text="ACCEPT" /> 

        <android.support.v7.widget.AppCompatButton 
         android:id="@+id/roster_reject_btn" 
         style="@style/ButtonStyle" 
         android:layout_height="32dp" 
         android:background="@color/acceptedPurpleColour" 
         android:layout_marginBottom="10dp" 
         android:layout_marginLeft="40dp" 
         android:layout_marginRight="10dp" 
         android:textSize="16sp" 
         android:textStyle="bold" 
         android:clickable="true" 
         android:layout_weight="1" 
         android:text="REJECT" /> 

       </LinearLayout> 

      </LinearLayout> 

     </LinearLayout> 

    </ScrollView> 

</RelativeLayout> 

buid.gradle(模塊:APP)

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion '25.0.0' 

    defaultConfig { 
     applicationId "sec.asdf_solutions.biz.security" 
     minSdkVersion 18 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    compile 'com.prolificinteractive:material-calendarview:1.4.3' 
    compile 'com.google.android.gms:play-services-maps:10.2.1' 
    compile 'de.hdodenhof:circleimageview:2.1.0' 
    compile 'com.squareup.retrofit2:retrofit:2.3.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.3.0' 
    compile 'joda-time:joda-time:2.9.4' 
    compile 'com.auth0.android:jwtdecode:1.1.0' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.google.android.gms:play-services-location:10.2.1' 
    compile 'com.android.support:support-annotations:24.2.0' 
    compile 'com.google.firebase:firebase-messaging:10.2.0' 
    compile 'com.google.maps:google-maps-services:0.1.20' 
    testCompile 'junit:junit:4.12' 
} 

apply plugin: 'com.google.gms.google-services' 

這是我的行爲ivity爲實現上述過程,

public class RosterActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

    //protected MapView mMapView; 

    android.support.v7.widget.AppCompatButton acceptButton; 
    android.support.v7.widget.AppCompatButton rejectButton; 
    private Context context; 

    private String token; 
    private long idLong; 
    private Response responseBody; 

    TextView rosterDateTextView; 
    TextView rosterStartTimeTextView; 
    TextView rosterEndTimeTextView; 
    TextView rosterLocationTextView; 

    View mainView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_roster); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_roster); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 

    } 

    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     return true; 
    } 

} 

特別注意:我不使用MapActivity。

有什麼想法嗎?

回答

2

MapView's documentation

這個類的用戶必須轉發來自含此視圖在這個類中對應的該活動或片段的所有生命週期方法。特別是,你必須在下列方法轉發:

  • 的onCreate(捆綁)
  • 在onStart()
  • 的onResume()
  • 的onPause()
  • 的onStop()
  • 的onDestroy( )
  • onSaveInstanceState()
  • onLowMemory()

所有這一切MapFragmentSupportMapFragment的作用是正向所有這些回調到MapView的,所以如果你做自己的工作,有沒有需要有一個具體的超類。

例如:

MapView rosterMapView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_roster); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_roster); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    rosterMapView = (MapView) findViewById(R.id.roster_map_view); 
    rosterMapView.onCreate(savedInstanceState); 
} 

@Override 
protected void onPause() {{ 
    super.onPause(); 
    rosterMapView.onPause(); 
} 

等,等 - 重寫每個方法和呼叫傳遞到您的MapView

+0

你能否爲我提供上述方法實現的代碼片段?如果可以的話,這對我很有幫助 – Barrier

+0

我的步驟中還有什麼不正確的嗎? – Barrier

+1

您只需重寫每個回調並將調用傳遞給MapView,就像它說的那樣。我添加了一個例子。 – ianhanniballake

1

你可以嘗試這種方式。你也不應該發佈/顯示你的API密鑰。嘗試隱藏。

 <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

       <fragment 
       android:id="@+id/map" 
       android:name="com.google.android.gms.maps.MapFragment" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
    </Linear Layout> 


    //finding xml view from xml layout 
      GoogleMap googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
+0

感謝您的建議。我忘了隱藏它 – Barrier

相關問題