【发布时间】:2015-02-21 14:29:12
【问题描述】:
我想将PreferenceCategory 显示为CardView。
在官方 Lollipop 偏好屏幕中,他们不直接使用CardView,但不同偏好类别之间也存在差距。我该怎么做?
这是我的偏好设置代码:
PrefsFragment(PreferenceFragment)
/**
* Created by xisberto on 08/11/14.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String category = getArguments().getString("category");
if (category != null) {
if (category.equals(getString(R.string.category_general))) {
addPreferencesFromResource(R.xml.prefs_general);
} else if (category.equals(getString(R.string.category_advanced))) {
addPreferencesFromResource(R.xml.prefs_erscheinungsbild);
}
}
}
}
偏好(PreferenceActivity)
public class Preferences extends PreferenceActivity {
private Toolbar mToolBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prepareLayout();
buildLegacyPreferences();
}
private void prepareLayout() {
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
View content = root.getChildAt(0);
LinearLayout toolbarContainer = (LinearLayout) View.inflate(this, R.layout.activity_prefs, null);
root.removeAllViews();
toolbarContainer.addView(content);
root.addView(toolbarContainer);
mToolBar = (Toolbar) toolbarContainer.findViewById(R.id.toolbar);
mToolBar.setTitle(getTitle());
mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void buildLegacyPreferences() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
String action = getIntent().getAction();
if (action == null) {
addPreferencesFromResource(R.xml.headers_legacy);
} else if (action.equals(getString(R.string.category_general))) {
mToolBar.setTitle(getString(R.string.header_general));
addPreferencesFromResource(R.xml.prefs_general);
} else if (action.equals(getString(R.string.category_advanced))) {
mToolBar.setTitle(getString(R.string.header_general));
addPreferencesFromResource(R.xml.prefs_erscheinungsbild);
}
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.headers, target);
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected boolean isValidFragment(String fragmentName) {
return fragmentName.equals(PrefsFragment.class.getName());
}
public static int getToastDuration(Context context) {
return (PreferenceManager.getDefaultSharedPreferences(context).getString(PreferenceNames.TOAST_DURATION, "0").equals("0")) ? 0 : 1;
}
}
【问题讨论】:
-
查看我创建的库:github.com/AndroidDeveloperLB/MaterialPreferenceLibrary。我认为看看如何自定义所有内容,你也可以实现这一点。我想你也应该看看这个网站:google.com/design/spec/patterns/settings.html
标签: android android-5.0-lollipop android-preferences android-cardview