【问题标题】:how to hide the divider between preferences in fragment如何隐藏片段中首选项之间的分隔符
【发布时间】:2015-02-15 13:26:34
【问题描述】:

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

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);

【问题讨论】:

  • 试试lv.setDivider(new ColorDrawable(Color.WHITE));
  • 对不起,没有listView。
  • 如@rana 所回答,从PreferenceFragmentCompat 扩展您的片段并更改底层recyclerview。

标签: android android-fragments fragment preference divider


【解决方案1】:

如果您使用的是 PreferenceFragmentCompat,它使用的是 Recycle 视图,因此您必须使用此代码。这会自动隐藏分隔线

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

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

【讨论】:

  • 只要把它放在 onViewCreated 中就可以了。这是最好的解决方案。
【解决方案2】:

这些解决方案对我不起作用。这是我在PreferenceFragmentCompat 中所做的:

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

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

【讨论】:

    【解决方案3】:

    您可以按样式删除分隔线。

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

    【讨论】:

      【解决方案4】:

      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>
      

      【讨论】:

        【解决方案5】:

        第一:如果在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。
        • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        • @Igor ,最初的问题编码具有列表视图的内容,所以我建议,尝试在我的代码上面在 xml 中实现,
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        相关资源
        最近更新 更多