Android 如何在片段中隐藏首选项之间的分隔符

Android 如何在片段中隐藏首选项之间的分隔符,android,android-fragments,fragment,preference,divider,Android,Android Fragments,Fragment,Preference,Divider,我想在片段中隐藏偏好之间的分隔符。 代码如下: 1.SettingsActivity.java public class SettingsActivity extends PreferenceActivity { super.onCreate(savedInstanceState); SettingsFragment settingsFragement = new SettingsFragment(); FragmentTransaction transaction =

我想在片段中隐藏偏好之间的分隔符。 代码如下:

1.SettingsActivity.java

public class SettingsActivity extends PreferenceActivity {
    super.onCreate(savedInstanceState);
    SettingsFragment settingsFragement = new SettingsFragment();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.add(android.R.id.content, settingsFragement, "settings");
    transaction.commitAllowingStateLoss();
}
2.SettingsFragment.java

public class SettingsFragment extends PreferenceFragment{
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }
}
3.settings.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory>
        <Preference 
             android:key="preference_a"
             android:title="preferenceA"/>
        <Preference 
             android:key="preference_b"
             android:title="preferenceB"/>
        <ListPreference 
             android:key="list_preference_c"
             android:title="list_preferenceC"/>
    </PreferenceCategory>
</PreferenceScreen>

首先:如果在xml中使用listview

在xml文件的listview中设置android:dividerHeight=“0dp”

秒:

ListView list = (ListView) findViewById(android.R.id.list);
list.setDivider(new ColorDrawable(Color.TRANSPARENT)); // or some other color int
list.setDividerHeight((int) getResources().getDisplayMetrics().density); 

如果您使用的是PreferenceFragmentCompat,那么它使用的是Recycle view,因此您必须使用此代码。这会自动隐藏分隔符

@Nullable
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

   setDivider(new ColorDrawable(Color.TRANSPARENT));
   setDividerHeight(0);
}

这些解决方案对我不起作用。下面是我在
首选项FragmentCompat
中所做的:

@Override
public void setDivider(Drawable divider) {
    super.setDivider(new ColorDrawable(Color.TRANSPARENT));
}

@Override
public void setDividerHeight(int height) {
    super.setDividerHeight(0);
}

您可以按样式删除分隔符

<style name="PreferenceFragment.Material">
    <item name="android:divider">@null</item>
</style>

@空的

style.xml中定义不带分隔符的自定义首选项主题

<style name="PrefsTheme" parent="PreferenceThemeOverlay.v14.Material">
    <item name="android:divider">@null</item>
    <item name="android:dividerHeight">0dp</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- ... -->
    <item name="preferenceTheme">@style/PrefsTheme</item>
</style>

尝试使用
lv.setDivider(新的彩色绘制(Color.WHITE))
抱歉,没有listView。正如@rana所回答的,从
首选项FragmentCompat
扩展您的fregment,并更改基础的recyclerview。抱歉,我尝试过。但是没有android:dividerHeight in Preference和ListPreference。这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。尝试下面的链接,@Igor,最初的问题编码包含listview内容,因此我建议,尝试用xml实现我的代码上方,只需将其放在onViewCreated中即可。这是最好的解决办法。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- ... -->
    <item name="preferenceTheme">@style/PrefsTheme</item>
</style>