如何在片段中隐藏偏好设置之间的分隔线

15

我希望在Fragment中隐藏偏好设置之间的分隔符。

以下是代码:

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>

在偏好设置中有一些系统默认的分隔线。 我想要隐藏这些分隔线。

怎样才能隐藏这些分隔线?非常感谢。


感谢大家的回答。但是,我的问题是我不能从活动和片段中获取列表视图。

ListView list = (ListView) findViewById(android.R.id.list);

2
尝试使用 lv.setDivider(new ColorDrawable(Color.WHITE)); - ρяσѕρєя K
抱歉,没有ListView。 - soildong
正如@rana所回答的那样,扩展您的“PreferenceFragmentCompat”片段并更改底层的recyclerview。 - gaara87
5个回答

20

如果您正在使用PreferenceFragmentCompat,则它正在使用Recycle view,因此您需要使用以下代码。这将自动隐藏分隔线。

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

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

4
只需将这个放在onViewCreated中,它就能正常工作。这是最佳解决方案。 - Tommie

10

这些解决方案对我没用。以下是我在PreferenceFragmentCompat中所做的:

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

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

1
在您的style.xml中定义自定义首选项主题,无需分隔线:
<style name="PrefsTheme" parent="PreferenceThemeOverlay.v14.Material">
    <item name="android:divider">@null</item>
    <item name="android:dividerHeight">0dp</item>
</style>

不要忘记在主应用程序主题中使用它,该主题也在style.xml中:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- ... -->
    <item name="preferenceTheme">@style/PrefsTheme</item>
</style>

0

您可以通过样式来删除分隔线。

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

-1

第一点:如果在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); 

抱歉,我尝试过了,但是在Preference和ListPreference中没有android:dividerHeight。 - soildong
这并没有提供问题的答案。如果您想对作者进行批评或请求澄清,请在他们的帖子下留言。 - Igor Borisenko
尝试使用以下链接:https://dev59.com/VXXYa4cB1Zd3GeqP2yaV - prakash
@Igor,最初的问题编码中包含了listview的内容,因此我建议尝试在xml中实现我的代码。 - prakash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接