Android 4.4 Settings显示平板模式
转载请注明出处: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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
