2010-01-08 8 views
2

J'ai besoin d'une vue cartographique sur un onglet. Le attached example montre comment faire cela si vous utilisez des intentions. Maintenant, je veux changer le niveau de zoom de la carte (s). Comment est-ce que je peux faire ceci, bien que j'utilise des intentions (ou est-ce qu'il y a complètement la solution différente )?Android MapView + Exemple d'onglet

Code d'activité:

public class TabMapsExample extends TabActivity {  
    TabHost mTabHost;   
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Context ctx = this.getApplicationContext();   
     //tab 1 
     mTabHost = getTabHost(); 
     TabSpec tabSpec1 = mTabHost.newTabSpec("tab_test1"); 
     tabSpec1.setIndicator("Map1"); 
     Intent i1 = new Intent(ctx, MapTabView.class); 
     tabSpec1.setContent(i1); 
     mTabHost.addTab(tabSpec1);   
     //tab2 
     mTabHost = getTabHost(); 
     TabSpec tabSpec2 = mTabHost.newTabSpec("tab_test1"); 
     tabSpec2.setIndicator("Map2"); 
     Intent i2 = new Intent(ctx, MapTabView.class); 
     tabSpec2.setContent(i2); 
     mTabHost.addTab(tabSpec2);   
     //tab 3 
     mTabHost = getTabHost(); 
     TabSpec tabSpec3 = mTabHost.newTabSpec("tab_test1"); 
     tabSpec3.setIndicator("Map"); 
     Intent i3 = new Intent(ctx, MapTabView.class); 
     tabSpec3.setContent(i3); 
     mTabHost.addTab(tabSpec3);  
    } 
} 

Code Mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/maptablayout" android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_height="fill_parent" android:layout_width="fill_parent" 
     android:background="#000000" android:orientation="vertical"> 
     <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" android:layout_height="50px" 
      android:id="@+id/textview" /> 
     <com.google.android.maps.MapView 
      android:id="@+id/mapview" android:layout_width="fill_parent" 
      android:layout_height="fill_parent" android:clickable="true" 
      android:apiKey="" /> 
    </LinearLayout> 
</RelativeLayout> 

thx

+0

En théorie, vous pouvez maintenant définir le niveau de zoom parmi les données que vous ajoutez à vos intentions, comme je l'ai décrit dans mon article ci-dessous. Devrait marcher. – Juri

Répondre

1

Zooming devrait être possible, soit en activant les commandes de zoom de la MapView et laissez votre zoom avant utilisateur ou out ou à la place par programmation en utilisant

mapView.getController().zoomIn(); 

ou

mapView.getController().zoomOut(); 

ou

mapView.getController().setZoom(...); 

Sinon ce que vous pouvez faire est de passer votre intention données supplémentaires de l'extérieur. Je devine juste maintenant, mais au fond, vous pourriez faire quelque chose comme

Intent intent = new Intent(this, MyMapActivity.class); //this is just one way of specifying it 
intent.putExtra(MyMapActivity.ZOOM_LEVEL_CONSTANT, 10); 
startActivity(intent); 

Dans le onCreate (...) de votre MyMapActivity vous pouvez alors lire les données transmises comme

Bundle retrievedData = this.getIntent().getExtras(); 
if (retrievedData != null) { 
    int zoomLevel = retrievedData.getInt(ZOOM_LEVEL_CONSTANT); 
    mapView.getController.setZoom(zoomLevel); 
} 

Edit: pour remplir un contenu onglet dynamiquement:

TabSpec tabSpec = tabHost.newTabSpec("Android X"); 
tabSpec.setContent(new TabContentFactory() { 
    public View createTabContent(String arg0) { 
     //return the view to add as content 
     return theView; 
    } 
}); 
1

Essayez d'utiliser MapController:

MapView mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 
    MapController mapController = mapView.getController(); 
    mapController.setZoom(10); 

Voir aussi Using Google Maps in Android

MISE À JOUR
Vous créez plusieurs instances de la même mise en page et il y a un problème pour obtenir par exemple nécessaire de MapView par id. Pouvez-vous utiliser des mises en page distinctes pour chaque onglet? ou les créer dynamiquement?

1

@ juri: Une intention peut-elle également recevoir des données en dehors de onCreate()? (par exemple pour définir le niveau de zoom dynamiquement pendant l'exécution et pas seulement lors de la création de l'intention)

+0

, vous devez ajouter ces déclarations en tant que commentaire à mon message. C'est la façon d'interagir sur Stackoverflow. J'ai mis à jour mon article original pour vous montrer comment créer dynamiquement le contenu d'un onglet sans utiliser Intents. De cette façon, vous devriez être capable de créer des références à vos objets MapView, ce qui vous permettra de faire un zoom etc. à l'exécution via les appels appropriés. – Juri