我正在尝试使用带有工具栏的 Android Jetpack Settings 指南。指南说根标签是
首选项.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="notifications"
app:title="Enable message notifications" />
<Preference
app:key="feedback"
app:summary="Report technical issues or suggest new features"
app:title="Send feedback" />
</PreferenceScreen>
SettingsFragment.kt
class SettingsFragment: PreferenceFragmentCompat(){
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
}
一切运行良好,settingsFragments 打开得很好,但因为我确实使用 NoActionBar 主题,所以似乎没有办法在 main_activity 中定义工具栏的情况下添加工具栏。我的评估是否正确,或者有没有办法让我在首选项片段中添加自定义工具栏?
也许为时已晚,但你可以通过这种方式实现 ->
<style name="PrefsTheme" parent="PreferenceThemeOverlay.v14.Material">
<item name="android:layout">@layout/fragment_settings</item>
</style>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/item_toolbar" />
<!-- the id is defined by the support lib. -->
<FrameLayout
android:id="@android:id/list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:targetApi="n" />
</LinearLayout>
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="preferenceTheme">@style/PrefsTheme</item>
</style>
然后在您的 SettingsFragment 中,您可以通过 id 找到工具栏并对其进行所有自定义:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.let {
// Customize toolbar
}
}
此问题的其他选择。在首选项屏幕中,您可以使用首选项类别,以及布局属性。
我正在谈论的一段代码:
<PreferenceCategory
android:title="Prueba"
android:textSize="10dp"
android:layout="@layout/activity_titulo"
/>
活动名称代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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="wrap_content"
tools:context=".activities.NuevoParteActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/id_cabecera"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.GVenaPDA.AppBarOverlay">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="?actionBarSize"
android:padding="@dimen/appbar_padding"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" />
<TextView
android:id="@+id/settings_general"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dp"
android:text="@string/cabecera_info"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu"
/>
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
class SettingsFragment : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val root = ((listView.parent as FrameLayout).parent as LinearLayout)
val toolbar = LayoutInflater.from(requireContext())
.inflate(R.layout.toolbar, root, false) as MaterialToolbar
toolbar.title = getText(R.string.title_settings)
root.addView(toolbar, 0)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.preferences);
}}
您可以在preferences.xml 膨胀后动态添加工具栏视图。我尝试了@Yerón Barreiro Martínez 的解决方案。但是,我无法访问片段页面上的工具栏实例。所以我无法设置标题或点击监听器。