作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!