我现在正在开发一个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方面仍然有点新意,所以经常会出现错误。谢谢!
答案 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
中。
为Fragment
和TextView
设置相同的权重是关键。它会为每个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>