在首选项设置中膨胀布局
Posted
技术标签:
【中文标题】在首选项设置中膨胀布局【英文标题】:Inflating a layout in preference settings 【发布时间】:2020-10-15 19:16:30 【问题描述】:我有一个自定义布局,它有一个 textview 和 ratingbar,然后我将布局设置为我的偏好的视图,问题是我试图在我的偏好片段中膨胀视图并设置 ratingbar onclick,我放了一个登录看看它是否被点击,但什么都没有发生
这是我的偏好<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:title="@string/YourPreferredLanguage"
android:icon="@drawable/ic_baseline_language_24" />
<CheckBoxPreference
android:title="@string/french"
android:key="french"
/>
<CheckBoxPreference
android:title="@string/portuguese"
android:key="portuguese"
/>
<Preference
android:title="Rate Our App"
android:icon="@drawable/ic_baseline_stars_24"
/>
<PreferenceCategory
android:layout="@layout/ratinglayout"/> //this is my custom layout
</PreferenceScreen>
这是我的布局
<?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_
android:layout_>
<TextView
android:id="@+id/ratingtext"
android:layout_
android:layout_
android:layout_marginStart="75dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="20dp"
android:text="Rate "
android:textColor="@android:color/black"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RatingBar
android:id="@+id/ratingBar"
android:layout_
android:layout_
android:layout_marginTop="8dp"
android:numStars="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.75"
app:layout_constraintStart_toEndOf="@+id/ratingtext"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
*我如何实现它的代码片段
class SettingsFragment : PreferenceFragmentCompat()
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?)
setPreferencesFromResource(R.xml.settingspreferences,rootKey)
val view = LayoutInflater.from(requireContext()).inflate(R.layout.ratinglayout,null,false)
val ratingbars = view.findViewById<RatingBar>(R.id.ratingBar)
ratingbars.setOnRatingBarChangeListener ratingBar, rating, fromUser ->
Log.d("TAG","Rating is " + rating) // when i click on rating bar , nothing happens
任何帮助将不胜感激,谢谢。
【问题讨论】:
你也会分享偏好xml文件吗? 我编辑了评论,你能再检查一下吗? 我认为您膨胀的偏好与设置为偏好类别的布局无关布局并设置一个侦听器,但该布局在任何地方都不可见,因此您无法单击它,如果您想要自定义首选项,则应将首选项类子类化 【参考方案1】:如果您只想访问该首选项,除了我上面的评论。
按如下方式进行
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?)
setPreferencesFromResource(R.xml.settingspreferences,rootKey)
getPreferenceScreen()
.getPreference(4)
.setOnPreferenceClickListener preference - > // handle click
请注意,您正在将布局设置为首选项类别,这并不是您想要使用它的目的,正确的方法是子类化首选项类并为其提供您想要的行为,然后您可以在直接偏好屏幕
【讨论】:
谢谢您的回答,但是子类化偏好是什么意思,这是我第一次使用偏好设置,如果您不介意,谢谢 我应该创建一个单独的类来扩展我的布局,然后在我的 xml 设置中创建preferencecategory 并在其中将我的自定义类放在那里,给它一个键并在我的设置片段?是这样吗?谢谢 ex - 我在这里创建了一个自定义首选项 -> github.com/AbhinavChauhan97/Gym_Data_Manager/blob/master/app/… 显示了两个单选按钮的首选项,它们作为一个组在此处使用 -> github.com/AbhinavChauhan97/Gym_Data_Manager/blob/master/app/… 好吧,我确实创建了一个扩展首选项的类,我覆盖了 onbindviewholder 并在 init 块上启动了 setlayoutresource,我应该在我的首选项设置 xml 中包含这个类还是在我的 settingspreference 片段中初始化?跨度> 您可以在 xml 中使用完全限定名称以及在代码中使用它,就像您可以在 xml 和代码中使用 create EditTextPrefernce 一样以上是关于在首选项设置中膨胀布局的主要内容,如果未能解决你的问题,请参考以下文章