我自定义的SurfaceView隐藏了屏幕上的其他组件

问题描述 投票:0回答:0

我正在尝试制作一个简单的地图。但我的自定义 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
    }
}

有人可以帮我吗?

android kotlin surfaceview
© www.soinside.com 2019 - 2024. All rights reserved.