nat*_*rio 16 android android-preferences android-listview android-fragments
我开始处理a中的偏好PreferenceFragment.这就是我所拥有的:

我试着:
摆脱物品之间的分隔物.我想这可以从样式中定义,但我无法弄清楚如何.我尝试ListView在运行时调用
获取首选项findViewById(android.R.id.list),因为我在某处读取,但它返回null.
设置新的,全宽有权在头顶部分隔,如看到这里.例如,在这种情况下,我想在"Statistiche"上方的全宽度分隔符,但不在列表顶部的"Generali"之上.
我想到的唯一方法是将分隔线设置为假偏好,例如:
<Preference
android:layout="@layout/divider" //here I set width and a divider resource
/>
<PreferenceCategory ... />
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是我的PreferenceFragment(或者ActionBarActivity它的)有一些左/右填充,这使得我添加到preferences.xml中的任何分隔符都不会覆盖整个宽度.
所以我的问题是:
如何摆脱图片中可以看到的默认项目分项?
如何在标题上方设置全宽分隔符,或者如何摆脱内部片段/活动填充?当然,我的活动布局没有任何(显式)填充.
Sag*_*Low 25
在以下代码下添加此代码PreferenceFragment:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// remove dividers
View rootView = getView();
ListView list = (ListView) rootView.findViewById(android.R.id.list);
list.setDivider(null);
}
Run Code Online (Sandbox Code Playgroud)
Mak*_*nov 17
AndroidX使它变得简单,但希望对其进行更好的记录。
在XML中
要在XML首选项之间添加/删除分隔符,请使用以下属性:
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
...
app:allowDividerAbove="true/false"
app:allowDividerBelow="true/false"
... />
</androidx.preference.PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
请注意,只有顶部分隔线allowDividerBelow设置为true,底部分隔线allowDividerAbove设置为,分隔线才会显示在两个首选项之间true。
在代码中
您也可以更改/删除程序分频器使用以下方法onActivityCreated您的PreferenceFragmentCompat:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// To remove:
setDivider(null);
// To change:
setDivider(ContextCompat.getDrawable(getActivity(), R.drawable.your_drawable));
setDividerHeight(your_height);
}
Run Code Online (Sandbox Code Playgroud)
X3B*_*tel 11
虽然有点晚了我在preff屏幕上遇到了与分隔器相同的麻烦并找到了这个解决方案:将自定义样式设置为托管活动并添加到样式:
<item name="android:listDivider">@null</item>
Run Code Online (Sandbox Code Playgroud)
它实际上与通过代码设置相同,但你保存一个findById,我认为它看起来更清晰
已经完全忘记了这个问题,现在会发布一个答案来帮助别人.我通过在onResume()托管我的活动的方法中移动我的代码来解决PreferenceFragment.我认为还有其他几点你可以回忆起非null ListView使用findViewById(android.R.id.list).
public boolean mListStyled;
@Override
public void onResume() {
super.onResume();
if (!mListStyled) {
View rootView = getView();
if (rootView != null) {
ListView list = (ListView) rootView.findViewById(android.R.id.list);
list.setPadding(0, 0, 0, 0);
list.setDivider(null);
//any other styling call
mListStyled = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可能可以摆脱rootView支票,但同时你甚至可能想要检查list != null.无论如何,我没有这样面对任何NPE.
所以,setDivider(null)取下项目分隔线.我设法通过以下方式添加覆盖屏幕整个宽度的分区分隔符:
list;ñ
<Preference
android:title="divider"
android:selectable="false"
android:layout="@layout/preference_divider"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15386 次 |
| 最近记录: |