我正在尝试制作一个简单的地图。但我的自定义 SurfaceView 将覆盖左侧菜单。 我不知道如何解决这个问题。
这是我的两种布局: Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constrainTitlebar"
android:layout_width="match_parent"
android:layout_height="64dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/md_theme_light_surface" >
<ImageView
android:id="@+id/imageMenu"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:padding="12dp"
style="@style/OptionsTint"
android:tint="@color/md_theme_light_onTertiaryContainer"
android:src="@drawable/menu" />
<TextView
android:id="@+id/textTitle"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintLeft_toRightOf="@+id/imageMenu"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@null"
android:gravity="center_vertical|left"
android:text="@string/app_name"
android:textColor = "@color/black"
android:textStyle="bold"
android:textSize="25dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constrainMapView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/constrainTitlebar"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationMenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start" />
</androidx.drawerlayout.widget.DrawerLayout>
fragment_map.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.lhr.indoor.MapView.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
这是我定制的MapView: https://github.com/kevin880701/InDoor/blob/main/app/src/main/java/com/lhr/indoor/MapView/MapView.kt
这是主要活动:
class MainActivity : AppCompatActivity(), View.OnClickListener, NavigationView.OnNavigationItemSelectedListener {
lateinit var navigationMenu: NavigationView
lateinit var constrainMapView: ConstraintLayout
lateinit var textTitle: TextView
private lateinit var activityBinding: ActivityMainBinding
lateinit var mainActivity: MainActivity
lateinit var fragmentTransaction: FragmentTransaction
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityBinding.root)
mainActivity = this
navigationMenu = activityBinding.navigationMenu
constrainMapView = activityBinding.constrainMapView
textTitle = activityBinding.textTitle
textTitle.text = regionNameArrayList[0]
fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(activityBinding.constrainMapView.id,mapFragmentArrayList[0])
fragmentTransaction.commit()
regionNameArrayList.forEachIndexed { index, itemName ->
navigationMenu.menu.add(0, index, index, itemName)
}
activityBinding.imageMenu.setOnClickListener(this)
activityBinding.navigationMenu.setNavigationItemSelectedListener(this)
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.imageMenu -> {
activityBinding.drawerLayout.openDrawer(GravityCompat.START)
}
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
textTitle.text = item.title as String
fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(activityBinding.constrainMapView.id,MapFragment(item.title as String))
fragmentTransaction.commit()
activityBinding.drawerLayout.closeDrawers()
return true
}
}
这是两个MapFragment:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View? {
binding = FragmentMapBinding.inflate(inflater, container, false)
val view = binding.root
mapView = binding.mapview
targetDataArrayList = allTargetDataArrayList.filter { it.targetRegion == region } as ArrayList<TargetData>
mapView.setZOrderOnTop(false)
mapView.setZOrderMediaOverlay(true)
return view
}
}
有人可以帮我吗?