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;
}



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值