转载请注明出处:http://blog.csdn.net/a785686918/article/details/79218704
因为在Setting.java中找不到相关设置,所以从Settings.java的父类PreferenceActivity.java入手
在onCreate中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.android.internal.R.layout.preference_list_content);
mListFooter = (FrameLayout)findViewById(com.android.internal.R.id.list_footer);
mPrefsContainer = (ViewGroup) findViewById(com.android.internal.R.id.prefs_frame);
boolean hidingHeaders = onIsHidingHeaders();
// 判断显示模式,左右还是单页
mSinglePane = hidingHeaders || !onIsMultiPane();
String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
Bundle initialArguments = getIntent().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
int initialTitle = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE, 0);
int initialShortTitle = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_SHORT_TITLE, 0);
// 以下代码省略...
}
关键代码见注释,其中onIsHidingHeaders()获取了一个参数的值
public boolean onIsHidingHeaders() {
return getIntent().getBooleanExtra(EXTRA_NO_HEADERS, false);
}
而设置这个值的地方在onBuildStartFragmentIntent中
public Intent onBuildStartFragmentIntent(String fragmentName, Bundle args,
int titleRes, int shortTitleRes) {
// 省略.....
intent.putExtra(EXTRA_NO_HEADERS, true);
return intent;
}
onBuildStartFragmentIntent调用的地方在startWithFragment中
public void startWithFragment(String fragmentName, Bundle args,
Fragment resultTo, int resultRequestCode, int titleRes, int shortTitleRes) {
Intent intent = onBuildStartFragmentIntent(fragmentName, args, titleRes, shortTitleRes);
if (resultTo == null) {
startActivity(intent);
} else {
resultTo.startActivityForResult(intent, resultRequestCode);
}
}
startWithFragment的调用有两处,两处都是在mSinglePane为true时才调用
public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
CharSequence titleText, Fragment resultTo, int resultRequestCode) {
if (mSinglePane) {
startWithFragment(fragmentClass, args, resultTo, resultRequestCode, titleRes, 0);
} else {
// 省略...
}
}
public void onHeaderClick(Header header, int position) {
if (header.fragment != null) {
if (mSinglePane) {
// 省略...
startWithFragment(header.fragment, header.fragmentArguments, null, 0,
titleRes, shortTitleRes);
}
// 省略...
}
所以hidingHeaders是false,只需要onIsMultiPane为true就可以了,所以再Settings.java中onIsMultiPane返回true
@Override
public boolean onIsMultiPane() {
return true;
}