只有一个标题时,跳过PreferenceActivity中的标题

我在我的应用程序中添加了首选项标题,以便在Honeycomb和平板电脑大小的ICS上显示首选项屏幕。 不过,目前我只有一个标题,因此您只需在电话尺寸的设备上单击一个标题屏幕即可。 有一个简单的方法告诉android只有一个标题时跳过标题屏幕,但仍然显示在大屏幕上?

看起来,股票通讯录应用程序做到这一点,但我已经浏览了它的来源 ,无法弄清楚它是如何做到这一点。

Solutions Collecting From Web of "只有一个标题时,跳过PreferenceActivity中的标题"

您可以通过将PreferenceFragments中的一个设置为默认值来跳过标题。

当你看PreferenceActivity.java源代码时,你会发现这两个额外的东西:

 /** * When starting this activity, the invoking Intent can contain this extra * string to specify which fragment should be initially displayed. */ public static final String EXTRA_SHOW_FRAGMENT = ":android:show_fragment"; /** * When starting this activity, the invoking Intent can contain this extra * boolean that the header list should not be displayed. This is most often * used in conjunction with {@link #EXTRA_SHOW_FRAGMENT} to launch * the activity to display a specific fragment that the user has navigated * to. */ public static final String EXTRA_NO_HEADERS = ":android:no_headers"; 

现在只需将这两个附加项添加到调用PrefenceActivity的intent中,并指定PreferenceFragment,默认情况下应如下显示:

 Intent intent = new Intent( this, Preferences.class ); intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, PreferencesFragment.class.getName() ); intent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true ); 

利用EXTRA_SHOW_FRAGMENT提到的EXTRA_SHOW_FRAGMENT,你可以操作Activity的Intent,像这样:

 @Override protected void onCreate(Bundle savedInstanceState) { // By default, show MainPreferences Intent intent = getIntent(); if (intent.getStringArrayExtra(EXTRA_SHOW_FRAGMENT) == null) { getIntent().putExtra(EXTRA_SHOW_FRAGMENT, MainPreferences.class.getName()); } super.onCreate(savedInstanceState); } 

我不知道你是否可以特别跳过标题,但这是我做的。

我创build了2个课程,一个用于超大屏幕尺寸,另一个用于其他课程。 EditPreferences.class加载我正常的preferences.xml,EditPreferencesXLarge.class加载首选项标题xml。

 public boolean onOptionsItemSelected(MenuItem item) { final int SCREENLAYOUT_SIZE_XLARGE = 4; final int HONEYCOMB = 11; int screenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK; switch(item.getItemId()) { case R.id.item_prefs: if (Build.VERSION.SDK_INT < HONEYCOMB) { startActivity(new Intent(this, EditPreferences.class)); } else if (screenSize < SCREENLAYOUT_SIZE_XLARGE) { startActivity(new Intent(this, EditPreferences.class)); } else { startActivity(new Intent(this, EditPreferencesXLarge.class)); } return true; } return (super.onOptionsItemSelected(item)); } 

您可以在您的活动中删除此代码。

  public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.pref_general, target); } 

并replace你的片段:

 public class SettingsActivity extends AppCompatPreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit(); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class GeneralPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); } } }