我目前正在开发一个小应用程序,允许用户在启动时显示Google地图。屏幕应在顶部显示一个菜单栏,但是当我在任何设备上运行我的应用程序时,地图会在整个布局中显示,覆盖菜单栏。
如何阻止片段与菜单栏重叠?
以下是我当前活动的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dark_grey"
android:orientation="vertical"
android:weightSum="10"
map:mapType="normal"
tools:context=".Map" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
android:orientation="horizontal"
android:weightSum="3" >
<ImageView
android:id="@+id/imageView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_launcher" />
<Spinner
android:id="@+id/menuSpinner"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:entries="@array/menu_array"
android:textSize="10sp" />
</LinearLayout>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
如您所见,布局相当简单,只是菜单栏为LinearLayout,地图为片段。
这个代码也很简单,只需设置微调器并初始化地图。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(edu.wcu.trackerapp.R.layout.activity_map);
// Initialize the spinner
menu = (Spinner) findViewById(R.id.menuSpinner);
// Set up the listener for the spinner.
menu.setOnItemSelectedListener(this);
try {
// Loading map
initializeMap();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* function to load map. If map is not created it will create it for you
* */
private void initializeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
} else {
googleMap.setMyLocationEnabled(true);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
cullowLocation, 15));
}
}
}
最后,这是设备上运行的应用程序的屏幕截图,其中启用了地图代码。
答案 0 :(得分:3)
目前布局的垂直/高度部分是
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10">
<LinearLayout
android:layout_height="0dp"
android:layout_weight="1" />
<fragment
android:layout_height="wrap_content" />
</LinearLayout>
如果你像对其他人一样为地图片段添加重量和高度,它应该可以工作。
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10">
<LinearLayout
android:layout_height="0dp"
android:layout_weight="1" />
<fragment
android:layout_height="0dp"
android:layout_weight="9" />
</LinearLayout>
或者如果你不使用重量
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_height="wrap_content"
/>
<fragment
android:layout_height="match_parent"
/>
</LinearLayout>