设置 activity 无法在平板电脑上打开
Settings activity doesn't open on tablet
我已经正确设置了 pref_general、它的值以及 运行 意图的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intecao = new Intent(characterList.this, SettingsActivity.class);
startActivity(intecao);
return true;
}
return super.onOptionsItemSelected(item);
}
因此,如果我点击选项弹出窗口中的设置,它将在我的 phone/7" 平板电脑中正确打开,但对于更大的平板电脑,例如 9" 或更大,它会给我一个空白屏幕弹出窗口上面什么也没有写,例如:
我该如何解决这个问题?造成这种情况的原因是什么?
--- 编辑 ---
这是我的 pref_general:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Made by Megafuji and Kintups"/>
<ListPreference
android:key="console1"
android:title="Console"
android:summary="Select your console"
android:defaultValue="1"
android:entries="@array/pref_example_list_titles"
android:entryValues="@array/pref_example_list_values"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="viewMode"
android:title="View Mode"
android:summary="Select your View Mode"
android:defaultValue="1"
android:entries="@array/pref_viewMode_list_titles"
android:entryValues="@array/pref_viewMode_list_values"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="charsize"
android:title="Icons Size"
android:summary="Select character screen size for text and icons."
android:defaultValue="1"
android:entries="@array/pref_character_size"
android:entryValues="@array/pref_character_size_value"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="tamanhoLetra"
android:title="Font Size"
android:summary="Select font size you want for move list."
android:defaultValue="1"
android:entries="@array/pref_font_size"
android:entryValues="@array/pref_font_size_value"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<CheckBoxPreference
android:key="screenDimming"
android:title="Disable screen dimming in this app"
android:summary="Disable screen locking/turning off."
android:defaultValue="false"
/>
<CheckBoxPreference
android:key="frame"
android:title="Show Frame Date"
android:summary="Show Frame Data for All Moves "
android:defaultValue="false"
/>
<CheckBoxPreference
android:key="damage"
android:title="Show Damage"
android:summary="Show Damage for All Moves "
android:defaultValue="false" />
<PreferenceCategory
android:title="Contact us: mkxmoves@gmail.com"/>
</PreferenceScreen>
您的 XML 平板电脑中的设置视图很可能没有您的实际设置视图元素。
您可以阅读 Android docs 以了解有关支持多视图的更多信息。基本上,自动设置的规则会导致 XML 使用平板电脑而非手机的视图。
它应该看起来像这样:
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
删除 XML 文件或更新它以包含您想要的设置元素。
找到答案了!
在 Android Developer Settings 之后我需要做的就是,如果我正在为 Android 3.0(API 级别 11)和更高版本开发,我需要使用 Preference Fragments,这是另一个 class 扩展 PreferenceFragment.
因此代码将使用这些参数:
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
...
}
和旧的 SettingsActivity 现在必须扩展 Activity 而不是 PreferenceActivity,如下所示:
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
public class SettingActivity extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setTheme(android.R.style.Theme_Holo_Light_DarkActionBar);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
PrefsFragment mPrefsFragment = new PrefsFragment();
mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);
mFragmentTransaction.commit();
}
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
String userName;
String tmpemail;
findPreference("profile_setting_username").setTitle(userName);
findPreference("profile_setting_username").setSummary(strHtml);
}
}
}
This is how I have implemeted my Settings Activity and it works on all type of devices.
我已经正确设置了 pref_general、它的值以及 运行 意图的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intecao = new Intent(characterList.this, SettingsActivity.class);
startActivity(intecao);
return true;
}
return super.onOptionsItemSelected(item);
}
因此,如果我点击选项弹出窗口中的设置,它将在我的 phone/7" 平板电脑中正确打开,但对于更大的平板电脑,例如 9" 或更大,它会给我一个空白屏幕弹出窗口上面什么也没有写,例如:
我该如何解决这个问题?造成这种情况的原因是什么?
--- 编辑 ---
这是我的 pref_general:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Made by Megafuji and Kintups"/>
<ListPreference
android:key="console1"
android:title="Console"
android:summary="Select your console"
android:defaultValue="1"
android:entries="@array/pref_example_list_titles"
android:entryValues="@array/pref_example_list_values"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="viewMode"
android:title="View Mode"
android:summary="Select your View Mode"
android:defaultValue="1"
android:entries="@array/pref_viewMode_list_titles"
android:entryValues="@array/pref_viewMode_list_values"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="charsize"
android:title="Icons Size"
android:summary="Select character screen size for text and icons."
android:defaultValue="1"
android:entries="@array/pref_character_size"
android:entryValues="@array/pref_character_size_value"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<ListPreference
android:key="tamanhoLetra"
android:title="Font Size"
android:summary="Select font size you want for move list."
android:defaultValue="1"
android:entries="@array/pref_font_size"
android:entryValues="@array/pref_font_size_value"
android:negativeButtonText="@null"
android:positiveButtonText="@null" />
<CheckBoxPreference
android:key="screenDimming"
android:title="Disable screen dimming in this app"
android:summary="Disable screen locking/turning off."
android:defaultValue="false"
/>
<CheckBoxPreference
android:key="frame"
android:title="Show Frame Date"
android:summary="Show Frame Data for All Moves "
android:defaultValue="false"
/>
<CheckBoxPreference
android:key="damage"
android:title="Show Damage"
android:summary="Show Damage for All Moves "
android:defaultValue="false" />
<PreferenceCategory
android:title="Contact us: mkxmoves@gmail.com"/>
</PreferenceScreen>
您的 XML 平板电脑中的设置视图很可能没有您的实际设置视图元素。
您可以阅读 Android docs 以了解有关支持多视图的更多信息。基本上,自动设置的规则会导致 XML 使用平板电脑而非手机的视图。
它应该看起来像这样:
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
删除 XML 文件或更新它以包含您想要的设置元素。
找到答案了!
在 Android Developer Settings 之后我需要做的就是,如果我正在为 Android 3.0(API 级别 11)和更高版本开发,我需要使用 Preference Fragments,这是另一个 class 扩展 PreferenceFragment.
因此代码将使用这些参数:
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
...
}
和旧的 SettingsActivity 现在必须扩展 Activity 而不是 PreferenceActivity,如下所示:
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
public class SettingActivity extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setTheme(android.R.style.Theme_Holo_Light_DarkActionBar);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
PrefsFragment mPrefsFragment = new PrefsFragment();
mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);
mFragmentTransaction.commit();
}
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
String userName;
String tmpemail;
findPreference("profile_setting_username").setTitle(userName);
findPreference("profile_setting_username").setSummary(strHtml);
}
}
}
This is how I have implemeted my Settings Activity and it works on all type of devices.