我在 Android Studio 中创建了一个项目来实现视图绑定和数据绑定。我不知道为什么材料卡不显示海拔。我已经在清单文件中添加了声明
android:hardwareAccelerated="true"
。
材料卡位于我的片段内,该片段由我的活动托管...我想我在活动内膨胀该片段时犯了一个错误,这可能吗?
在我的布局中,我使用尺寸值“@dimen/elevation_lg”,即 24dp。
这是我的活动 .xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<layout 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"
tools:context=".view.auth.LoginActivity">
<FrameLayout
android:id="@+id/fragment_container_login"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="0dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment_login"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_login" />
</FrameLayout>
</layout>
这是与上面的 .xml 布局文件关联的我的活动类:
class LoginActivity : AppCompatActivity() {
private lateinit var toolbar: Toolbar
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityLoginBinding =
DataBindingUtil.setContentView(this, R.layout.activity_login)
toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
initNavigation(R.id.nav_host_fragment_login)
}
override fun initNavigation(resNavController: Int) {
val navHostFragment =
supportFragmentManager.findFragmentById(resNavController) as NavHostFragment
navController = navHostFragment.navController
appBarConfiguration = AppBarConfiguration.Builder(navController.graph).build()
toolbar.setupWithNavController(navController, appBarConfiguration)
}
}
这是我的片段 .xml 文件,其中包含卡片:
<?xml version="1.0" encoding="utf-8"?>
<layout 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"
tools:context=".view.auth.LoginFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="@dimen/margin_md"
android:layout_marginTop="@dimen/margin_md"
android:checkable="true"
android:clickable="true"
android:elevation="@dimen/elevation_lg"
android:focusable="true"
app:cardBackgroundColor="@color/cardview_light_background"
app:cardCornerRadius="@dimen/radius_sm"
app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/margin_sm"
android:orientation="vertical">
<!-- other components -->
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</layout>
这是与上面的 .xml 布局文件关联的片段类:
class LoginFragment : Fragment() {
private var _binding: FragmentLoginBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentLoginBinding.inflate(inflater, container, false)
return binding.root
}
}
正如我上面所说,我已经在清单文件中添加了声明 hardwareAccelerated=true 。
不要使用
android:elevation="@dimen/elevation_lg"
,而是使用 app:cardElevation
.
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
app:cardElevation="@dimen/elevation_lg"
...>
<!-- Other attributes -->
</com.google.android.material.card.MaterialCardView>