2017-06-01 2 views
1

Ich habe versucht, in einem linearen Layout zu implementieren, und dieses Layout gehört nicht zu einer MapActivity. Ich habe auch keinen fragment verwendet, um diesen Prozess zu implementieren.Android: Wie man com.google.android.gms.maps.MapView implementiert, ohne eine Kartenaktivität zu verwenden

Außerdem habe ich einen API-Schlüssel von der Google Developer Console erhalten und einige APIs aktiviert, die sich auf Standorte und Karten beziehen.

Das ist mein Android-Manifest in Android Studio ist,

<?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> 

Das ist mein Layout

Datei ist
<?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 (Modul: 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' 

Das ist meine Tat ivity für obige Verfahren zu implementieren,

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; 
    } 

} 

Wichtiger Hinweis: Ich bin nicht MapActivity verwenden.

Haben Sie irgendwelche Ideen?

Antwort

2

Per MapView's documentation:

Nutzer dieser Klasse müssen alle Lebenszyklus-Methoden aus der Aktivität oder Fragment mit diesem Blick auf die entsprechenden in dieser Klasse übermitteln. Insbesondere müssen Sie auf den folgenden Methoden weiter:

  • onCreate (Bundle)
  • onStart()
  • onResume()
  • onPause()
  • OnStop()
  • onDestroy (
  • )
  • onSaveInstanceState()
  • onLowMemory()

dass all MapFragment oder SupportMapFragment tut, ist nach vorn all diesen Rückrufen auf die MapView wenn Sie also, dass selbst arbeiten, gibt es keine Notwendigkeit, eine bestimmte übergeordnete Klasse haben.

Zum Beispiel:

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(); 
} 

usw., usw. - jede Methode außer Kraft setzen und den Anruf auf Ihre MapView passieren.

+0

Können Sie mir ein Code-Snippet für die obige Methodenimplementierung bereitstellen?Wenn Sie können, ist es eine große Hilfe für mich – Barrier

+0

Ist auch etwas falsch in meinen Schritten? – Barrier

+1

Sie überschreiben einfach jeden Rückruf und übergeben den Anruf an MapView, so wie es heißt. Ich habe ein Beispiel hinzugefügt. – ianhanniballake

1

Sie können diesen Weg versuchen.Auch sollten Sie Ihren API-Schlüssel nie veröffentlichen/zeigen. Versuche zu verstecken.

 <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

Vielen Dank für den Rat. Ich vergesse es zu verstecken – Barrier

Verwandte Themen