java – PreferenceFragment支持所有API问题
作者:互联网
这是第一次使用偏好片段和偏好活动
取决于这篇文章的接受答案:PreferenceActivity Android 4.0 and earlier
我应用下面的代码sa并在姜饼运行设备上测试它,它的工作正常但是当在果冻豆运行设备app力直接关闭测试时,我知道我的代码有些问题或者我想念一些东西,
所以请任何帮助解决它将非常感谢,谢谢.
飞溅类:
public class Splash extends Activity{
MediaPlayer ourSong;
private Thread splashTread;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences
(getBaseContext());
boolean music = getPrefs.getBoolean("checkbox", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000); }
catch (InterruptedException e){
e.printStackTrace(); }
finally{
Intent i = new Intent(Splash.this, MainActivity.class);
Splash.this.startActivity(i); }}
};
timer.start(); }
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
synchronized(splashTread){
splashTread.notifyAll();
}
}
return true;
}
}
MainActivity类:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Boolean customTitleSupported = requestWindowFeature
(Window.FEATURE_CUSTOM_TITLE);
super.onCreate(savedInstanceState);
if (customTitleSupported) {
getWindow().setFeatureInt
(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);
setContentView(R.layout.activity_main);}}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cool_menu, menu);
getLayoutInflater().setFactory(new Factory() {
public View onCreateView(String name, Context context,
AttributeSet attrs) {
if (name .equalsIgnoreCase
("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater li = LayoutInflater.from(context);
final View view = li.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
((TextView) view).setTextSize(25);
((TextView) view).setTextColor(Color.RED);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.preferences:
if (Build.VERSION.SDK_INT < 11) {
startActivity(new Intent(this, Prefs.class));}
else {
startActivity(new Intent(this, OtherPreferencesActivity.class));} return(true);
}
return(super.onOptionsItemSelected(item));
}
}
Prefs类:
public class Prefs extends PreferenceActivity{
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
Boolean customTitleSupported = requestWindowFeature
(Window.FEATURE_CUSTOM_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if (customTitleSupported) {
getWindow().setFeatureInt
(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);
TextView tv = (TextView) findViewById(R.id.title_tv1);
tv.setText("preference screen"); }
addPreferencesFromResource(R.xml.preference);
}
}
PrefsFragment类:
public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
}
}
OtherPreferencesActivity类:
public class OtherPreferencesActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
preference.xml:
<?xml version="1.0" encoding="utf-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:title="Splash Music"
android:defaultValue="true"
android:key="checkbox"
android:summary="Remove the mark to stop music" />
</PreferenceScreen>
preference_headers.xml:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="com.tsn.dr.PrefsFragment"
android:summary="stting1"
android:title="stting2">
<extra
android:name="resource"
android:value="preferences"/>
</header>
</preference-headers>
在jelly bean设备上运行时的logcat:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo
{com.test.demo/com.test.demo.MainActivity}: android.util.AndroidRuntimeException: You
cannot combine custom titles with other title features
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
at android.app.ActivityThread.access$600(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.util.AndroidRuntimeException: You cannot combine custom titles
with other title features
at com.android.internal.policy.impl.PhoneWindow.requestFeature
(PhoneWindow.java:279)
at com.android.internal.policy.impl.PhoneWindow.generateLayout
(PhoneWindow.java:2839)
at com.android.internal.policy.impl.PhoneWindow.installDecor
(PhoneWindow.java:3079)
at com.android.internal.policy.impl.PhoneWindow.setContentView
(PhoneWindow.java:304)
at android.app.Activity.setContentView(Activity.java:1924)
at com.test.demo.MainActivity.onCreate(MainActivity.java:28)
at android.app.Activity.performCreate(Activity.java:5206)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
... 11 more
更新:
如果我删除:MainActivity的自定义标题:
Boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
if (customTitleSupported) { getWindow().setFeatureInt
(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);
它在两个设备上运行良好,但我想保持自定义标题.
解决方法:
最后它完美地运作:
我在偏好主题中找到了解决方案,已经明确表示如下:
<activity android:name=".Prefs"
android:label="@string/app_name"
android:theme="@style/PreferencesTheme">
PreferencesTheme.XML:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="CustomWindowTitleBackground" />
<style name="PreferencesTheme" parent="android:Theme">
<item name="android:windowTitleSize">35dp</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>
</resources>
标签:java,android,preferenceactivity 来源: https://codeday.me/bug/20190629/1327461.html