调整“Google maps V2”的大小以占用屏幕的一半而不是整个屏幕

时间:2014-07-09 13:01:41

标签: java android google-maps-android-api-2 google-maps-api-2

我现在正在开发一个Android项目:我想要做的是让地图的屏幕上半部分显示,另一半用于我稍后写的信息。

我的问题是地图占据了整个屏幕,我尝试了不同的布局(相对,网格)和充气另一个布局,但地图总是占用整个屏幕,无论我用过什么。

这是我的代码:

public class Map extends SherlockMapFragment implements IPage, View.OnClickListener {

private GoogleMap    googleMap;
private Marker       marker;
ViewGroup            view;


public Map() {
    super();
}
    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    view = (ViewGroup) inflater.inflate(R.layout.map_page, null);

    googleMap = getMap();
    googleMap.setMyLocationEnabled(true);
    marker = googleMap.addMarker(new MarkerOptions().title("Event").position(new LatLng(0, 0)));

    final LatLng latLng = new LatLng(48.8146, 2.39525);      

    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16.0f));
    marker.setPosition(latLng);

    return view;
}

和xml:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

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

  <fragment
    android:id="@+id/fragment_map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1" />
</LinearLayout>

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

   <TextView 
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/infotext">          
   </TextView>

 </LinearLayout>
</LinearLayout>

再次,地图工作没有任何问题,但它需要整个屏幕,我真的不明白为什么。 另外,我正在使用lib SherlockBar(这导致我实现地图的一些问题)。

我非常感谢任何帮助,我在开发Java / eclipse方面仍然有点新意,所以经常会出现错误。谢谢!

3 个答案:

答案 0 :(得分:9)

如果您希望将屏幕拆分为两个相等的部分,则只需使用以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/fragment_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="50" />

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="50"
        android:id="@+id/infotext" />          

</LinearLayout>

由于您只有两个视图,因此不必将它们包装到其他视图LinearLayout中。

FragmentTextView设置相同的权重是关键。它会为每个LinearLayout提供一半的屏幕(高度为View的方向垂直)。

答案 1 :(得分:1)

我知道这有点晚了,但是自从我过去为我的问题寻求答案时,我的想法就是这样:

看起来你的MapFragment线性布局占据了整个屏幕。而不是 match_parent ,将 android:layout_height 更改为 fill_parent

这里的区别在于 match_parent 使视图的高度占据父级的所有高度。在您的情况下,父级是线性布局,其大小与屏幕大小相同。

fill_parent 实际上填充了父级的可用空间。

对于您的示例,以下XML应该有效:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <fragment
    android:id="@+id/fragment_map"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1" />


 <LinearLayout
   android:layout_width="match_parent"
   android:layout_height="fill_parent"
   android:layout_weight="1.0"
   android:orientation="vertical"
   android:weight="7">

   <TextView 
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/infotext">          
   </TextView>

     </LinearLayout>
</LinearLayout>

使用权重wrap_content可以进行相对布局。在我的设备上,下面的重量看起来就像那样(并且你可以玩你的那些以达到所需的尺寸)

|----------------|
|                |
|                |
|                |
|                |
|      Map       |
|                |
|                |
|                |
|                |
|----------------|
|      Text      |
|----------------|

答案 2 :(得分:0)

使用这个: -

    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import com.google.android.gms.maps.CameraUpdate;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.MapView;
    import com.google.android.gms.maps.MapsInitializer;
    import com.google.android.gms.maps.model.LatLng;

    import android.annotation.SuppressLint;
    //import android.app.Fragment;
    import android.support.v4.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    @SuppressLint("NewApi")
    public class Map_Check extends Fragment {

        public Map_Check(){}


        MapView mapView;
        GoogleMap map;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.map_view, container, false);

            // Gets the MapView from the XML layout and creates it
            mapView = (MapView) v.findViewById(R.id.mapview);
            mapView.onCreate(savedInstanceState);

            // Gets to GoogleMap from the MapView and does initialization stuff
            map = mapView.getMap();
            map.getUiSettings().setMyLocationButtonEnabled(false);
            map.setMyLocationEnabled(true);

            MapsInitializer.initialize(this.getActivity());

            // Updates the location and zoom of the MapView
            CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(48.8146, 2.39525), 10);
            map.animateCamera(cameraUpdate);

            return v;
        }

        @Override
        public void onResume() {
            mapView.onResume();
            super.onResume();
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
        }

        @Override
        public void onLowMemory() {
            super.onLowMemory();
            mapView.onLowMemory();
        }

    }

和map_view.xml: -

<LinearLayout 
   android:layout_width="fill_parent" 
   android:layout_height="150dp">
<com.google.android.gms.maps.MapView 
   android:id="@+id/mapview" 
   android:layout_width="100dp"
   android:layout_height="100dp"/>
</LinearLayout>