Umístěním Přiblížit Controls v MapView

hlasů
17

Snažím se dostat ovládacích prvků přiblížení se ukázat v mapviewnásledující kód téměř funguje, ale ovládací prvky zoom se zobrazí v levém horním rohu mapview, a ne dole uprostřed, jako bych upřesňující přes setGravity(). Může někdo objasnit mi, co mi chybí?

zoomView = (LinearLayout) mapView.getZoomControls();
zoomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); 
zoomView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
mapView.addView(zoomView);

Tyto pohledy / nákresy jsou konstruovány programově, není žádný soubor layout vyladit.

Položena 04/11/2008 v 22:30
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
23

Přidejte následující řádek do OnCreate()způsobu vaší MapViewtřídy:

view.setBuiltInZoomControls(true);

Odpovězeno 23/03/2010 v 13:41
zdroj uživatelem

hlasů
19

Trik je zde umístit jiné rozložení kontejner, kam chcete umístit ZoomControls a vložte ZoomControls do toho.

Skutečný trik je použít RelativeLayoutspíše než LinearLayoutdo polohy prvků, jak je uvedeno v tomto příkladu layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
  <com.google.android.maps.MapView
    android:id="@+id/myMapView"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="MY_MAP_API_KEY"
  />
  <LinearLayout android:id="@+id/layout_zoom" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
  /> 
</RelativeLayout> 

Layout_zoom LinearLayout element je umístěn v pravém dolním středu obrazovky, umístit ji na prostřední / dolní části MapView.

Pak v rámci Vaše aktivita je onCreate, získat odkaz na layout_zoom prvku a vložte ZoomControl do něj, podobně jako jste již udělali:

LinearLayout zoomLayout =(LinearLayout)findViewById(R.id.layout_zoom);  
View zoomView = myMapView.getZoomControls(); 
zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
myMapView.displayZoomControls(true);

Tyto ZoomControls by měl nyní zobrazí na dlouhé kliknutí, aniž by krást mapa dotekové události.

Odpovězeno 11/11/2008 v 08:27
zdroj uživatelem

hlasů
7

Výše uvedený nepracoval pro mě, ale to (umístit ovládací prvek na vpravo dole):

mapView.setBuiltInZoomControls(true);
ZoomButtonsController zbc = mapView.getZoomButtonsController();
ViewGroup container = zbc.getContainer();
for (int i = 0; i < container.getChildCount(); i++) {
  View child = container.getChildAt(i);
  if (child instanceof ZoomControls) {
    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) child.getLayoutParams();
    lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;
    child.requestLayout();
    break;
  } 
}
Odpovězeno 12/05/2011 v 23:51
zdroj uživatelem

hlasů
4

Reto: Díky za Vaši odpověď, ale nápad byl, aby to bez použití rozvržení XML.

Nakonec jsem přišel na problém. Vzhledem k tomu, MapView je podtřídou ViewGroup, můžete snadno přidat podřízené pohledy (jako ovládací prvky zoom). Vše, co potřebujete, je instance MapView.LayoutParams a máte dobré jít. Udělal jsem něco takového (vloží ovládací prvky zvětšení v dolní středu MapView).

  // layout to insert zoomcontrols at the bottom center of a mapview
  MapView.LayoutParams params = MapView.LayoutParams(
    LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT,
    mapViewWidth / 2, mapViewHeight,
    MapView.LayoutParams.BOTTOM_CENTER);

  // add zoom controls
  mapView.addView(mapView.getZoomControls(), params);
Odpovězeno 28/11/2008 v 07:32
zdroj uživatelem

hlasů
2

Můžete zkusit toto:

MapView map = (MapView)findViewById(R.id.mapview);
map.setBuiltInZoomControls(true);
Odpovězeno 25/09/2018 v 06:59
zdroj uživatelem

hlasů
2

ze Skupiny Google závit jsem našel toto:

ZoomControls bez XML:

   public class MyMapActivity extends MapActivity {  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RelativeLayout relativeLayout = new RelativeLayout(this);
        setContentView(relativeLayout);

        final MapView mapView = new MapView(this, DEBUG_MAP_API_KEY);
        RelativeLayout.LayoutParams mapViewLayoutParams = new
RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT );
        relativeLayout.addView(mapView, mapViewLayoutParams);

        RelativeLayout.LayoutParams zoomControlsLayoutParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT );
        zoomControlsLayoutParams.addRule
(RelativeLayout.ALIGN_PARENT_BOTTOM);
        zoomControlsLayoutParams.addRule
(RelativeLayout.CENTER_HORIZONTAL);

        relativeLayout.addView(mapView.getZoomControls(),
zoomControlsLayoutParams);

        mapView.setClickable(true);
        mapView.setEnabled(true);

 } 

byla 100% pracuje pro mě SDK1.1

Odpovězeno 27/02/2009 v 12:45
zdroj uživatelem

hlasů
2

Bohužel nemohu přidat komentář k Jason Hudgins schválené řešení od 28. listopadu v 6:32, ale mám malou chybu se svým kódem:

V tomto řádku:

MapView.LayoutParams params = MapView.LayoutParams(

Došlo k chybě Eclipse dal mi bylo

"Metoda LayoutParams (int, int, int, int, int) je definována pro typ MapView"

místo toho, vytvářet nové MapView.LayoutParams objekt připevnil ji, například takto:

MapView.LayoutParams params = **new** MapView.LayoutParams(

Trvalo mi nějaký čas, aby zjistili, jak jsem n00b: D

Odpovězeno 22/01/2009 v 23:44
zdroj uživatelem

hlasů
0

Reto - problém s používáním FILL_PARENT je, že ovládání zoomu pak „krade“ všechny dotykových událostí; takže nelze posouvat mapy, zatímco ovládací prvky zoom jsou viditelné. Víte, jak tomu zabránit?

Odpovězeno 08/11/2008 v 21:24
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more