gpt4 book ai didi

android - 如何在 PreferenceFragment 中显示分隔符?

转载 作者:行者123 更新时间:2023-11-30 01:23:40 25 4
gpt4 key购买 nike

我正在使用 v7 支持库中的 PreferenceFragmentCompat 来显示一些设置。我的preferences.xml文件如下——

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<EditTextPreference
android:defaultValue="@string/temp_url_default"
android:key="temp_edit_preference_key"
android:title="@string/temp_url_setting_title" />

<EditTextPreference
android:defaultValue=""
android:key="username_preference_key"
android:title="@string/username_setting_title" />

<EditTextPreference
android:defaultValue=""
android:key="password_preference_key"
android:title="@string/password_setting_title" />

<ListPreference
android:key="reset_preference_key"
android:title="@string/reset_setting_title" />

</PreferenceScreen>

Java 代码 -

public class SettingsFragment extends PreferenceFragmentCompat {

@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
}
}

我用于首选项的主题是 -

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="preferenceTheme">@style/AppTheme.Preference</item>
</style>

<style name="AppTheme.Preference" parent="@style/PreferenceThemeOverlay">
<item name="android:textColorPrimary">@android:color/holo_blue_dark</item>
</style>

四个设置只是一个显示在另一个下方,中间没有任何分隔线。如何在两个项目之间显示分隔线?

最佳答案

对于 com.android.support:preference-v7 支持库的一些修订,现在使用 RecyclerView 来显示设置。开箱即用的 RecyclerView 没有分隔线,但向 RecyclerView 添加 ItemDecoration 将起作用:

public class YourPreferenceFragment extends PreferenceFragmentCompat {

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RecyclerView recyclerView = (RecyclerView) getView().findViewById(R.id.list);
recyclerView.addItemDecoration(
new DividerItemDecorationPreferences(
getActivity(),
getResources().getDimensionPixelSize(R.dimen.row_preferences_margin_horizontal),
getResources().getDimensionPixelSize(R.dimen.row_preferences_margin_horizontal)));
}

}

显然,您可以使用任何您喜欢的分隔线。至于我自己使用以下类(class):

public class DividerItemDecorationPreferences extends RecyclerView.ItemDecoration {

private Drawable mDivider;
private int paddingLeft = 0;
private int paddingRight = 0;

public DividerItemDecorationPreferences(Context context, int paddingLeft, int paddingRight) {
mDivider = ContextCompat.getDrawable(context, R.drawable.divider_recycler_view);
this.paddingLeft = paddingLeft;
this.paddingRight = paddingRight;
}

@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int left = paddingLeft;
int right = parent.getWidth() - paddingRight;
int childCount = parent.getChildCount();
boolean lastIteration = false;
for (int i = 0; i < childCount; i++) {
if (i == childCount - 1)
lastIteration = true;
View child = parent.getChildAt(i);
if (!lastIteration) {
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin;
int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
}

}

divider_recycler_view.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<size android:height="1dp" />
<solid android:color="#1F000000" />

</shape>

关于android - 如何在 PreferenceFragment 中显示分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36740867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com