棒棒糖上的Android系统首选项屏幕似乎使用类似于"卡片布局的布局"。
我试图让我的应用看起来一样,但无法看到他们是如何使用默认的PreferenceFragment
实现的。任何人都可以向我解释,如何在不写自己的偏好的情况下达到同样的效果吗?
请注意,我已经看过并阅读了这些问题,但他们没有提供合适的答案:
PreferenceFragment
无关)PreferenceFragment
)如果感兴趣,我目前的首选项xml如下所示:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto">
<PreferenceCategory android:title="@string/preferences_title_general">
<Preference
android:key="Prefs.Delete.Row.Token"
android:summary="@string/preferences_delete_row_token_summary"
android:title="@string/preferences_delete_row_token_title"/>
<Preference
android:key="Prefs.Delete.Cell.Token"
android:summary="@string/preferences_delete_cell_token_summary"
android:title="@string/preferences_delete_cell_token_title"/>
<Preference
android:key="Prefs.Null.Token"
android:summary="@string/preferences_null_token_summary"
android:title="@string/preferences_null_token_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/preferences_title_appearance">
<SwitchPreference
android:dialogTitle="@string/preferences_theme_title"
android:key="Prefs.Appearance.Theme"
android:summaryOff="@string/preferences_theme_summary_off"
android:summaryOn="@string/preferences_theme_summary_on"
android:switchTextOff="@string/general_no"
android:switchTextOn="@string/general_yes"
android:title="@string/preferences_theme_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/preferences_title_misc">
<SwitchPreference
android:dialogTitle="@string/preferences_read_back_title"
android:key="Prefs.Voice.Feedback"
android:switchTextOff="@string/general_no"
android:switchTextOn="@string/general_yes"
android:title="@string/preferences_read_back_title"/>
<Preference
android:key="Prefs.Export.Barcode.Properties"
android:title="@string/preferences_export_title"
android:summary="@string/preferences_export_summary"/>
<Preference
android:key="Prefs.Show.Eula"
android:title="@string/preferences_eula_title"
android:summary="@string/preferences_eula_summary"/>
</PreferenceCategory>
</PreferenceScreen>
我扩展PreferenceFragment
并通过
addPreferencesFromResource(R.xml.prefs);
答案 0 :(得分:4)
我通过在使用布局的Preference
项之间添加虚拟PreferenceCategory
来“解决”这个问题,该布局模仿了问题中屏幕截图中的外观:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto">
<PreferenceCategory></PreferenceCategory>
<Preference layout="@layout/preference_divider" />
<PreferenceCategory></PreferenceCategory>
</PreferenceScreen>
布局看起来像这样:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@drawable/shadow_bottom" />
<View android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@drawable/shadow_top" />
</LinearLayout>
答案 1 :(得分:0)
对我而言,通过自定义布局设置背景无效。高度也不适用。
虽然这对我有用:
public class PreferenceDivider extends Preference {
public PreferenceDivider(Context context) {
super(context);
}
public PreferenceDivider(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected View onCreateView(ViewGroup parent) {
Resources res=getContext().getResources();
View v=super.onCreateView(parent);
v.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, res.getDimensionPixelSize(R.dimen.divider_height)));
v.setBackground(res.getDrawable(R.drawable.preference_category_divider, null));
return v;
}
}
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto">
<PreferenceCategory/>>
<your.package.path.PreferenceDivider/>
<PreferenceCategory/>>
</PreferenceScreen>
这里有9个补丁图片:https://drive.google.com/file/d/1M5uXXnFc0HHx2BOHQqLtvAXFet4ICDj0/view?usp=sharing