and*_*qq6 5 android splash-screen
我的应用程序启动取决于用户偏好和三个不同的复选框:
1-启动没有启动和音乐的应用程序。
2- 启动只有飞溅的应用程序。
3-启动带有spalsh和音乐的应用程序。
使用下面的代码,它的工作完美无缺。
但仍有两点需要实现:
首先 只应选中一个复选框。
在您根据需要选中任何一个复选框后,第二次返回主活动,在这里您可以使用后退按钮或退出按钮退出应用程序,我的选项菜单中已有它,问题是使用后退按钮或退出按钮它不响应第一次点击,我必须点击两次才能退出应用程序。
但我无法实现,
任何帮助请将不胜感激。
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000); }
catch (InterruptedException e){
e.printStackTrace(); }
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent); }}
};
timer.start(); }
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
在 xml 文件夹中:prefs.xml
<?xml version="1.0" encoding="utf-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:title="without splash screen"
android:defaultValue="true"
android:key="without_splash_screen"
android:summary="Start app without splash"/>
<CheckBoxPreference android:title="splash screen"
android:defaultValue="true"
android:key="splash"
android:summary="Start app with splash only" />
<CheckBoxPreference android:title="splash screen music"
android:defaultValue="true"
android:key="splash_music"
android:summary="Start app with splash and music" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
更新:
我也尝试了下面的代码,但它没有改变任何事情,仍然可以检查所有的复选框:
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
public void getPrefs() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
boolean splash = getPrefs.getBoolean("splash", false);
boolean music = getPrefs.getBoolean("splash_music", false);
if (without_splash_screen == true){
splash = false;
music = false;
}else if (splash == true){
music = false;
without_splash_screen = false;
}else if (music == true){
without_splash_screen = false;
splash = false;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我还尝试了另一个代码,但它没有改变任何事情,仍然可以检查所有检查框:
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
else {
getPrefs.getBoolean("splash", false);
getPrefs.getBoolean("splash_music", false);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
else
{
getPrefs.getBoolean("without_splash_screen", false);
getPrefs.getBoolean("splash_music", false);
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
boolean splash_music = getPrefs.getBoolean("splash_music", true);
if (splash_music == true) {
ourSong.start();
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
else
{
getPrefs.getBoolean("without_splash_screen", false);
getPrefs.getBoolean("splash", false);
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
任何建议,谢谢。
更新 3(整个项目):
1-选中一个复选框完美实现。
2- 在 MainActivity 中使用后退按钮或退出按钮,对第一次单击没有响应,我必须单击两次或三次才能退出应用程序。
飞溅.java
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle DrTsn) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(DrTsn);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
配置文件
public class Prefs extends PreferenceActivity {
CheckBoxPreference splash;
CheckBoxPreference splash_music;
CheckBoxPreference no_splash_music;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
splash = (CheckBoxPreference) findPreference("splash");
splash_music = (CheckBoxPreference) findPreference("splash_music");
no_splash_music = (CheckBoxPreference) findPreference("without_splash_screen");
splash.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(true);
splash_music.setChecked(false);
no_splash_music.setChecked(false);
return true;
}
});
splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(true);
no_splash_music.setChecked(false);
return true;
}
});
no_splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(false);
no_splash_music.setChecked(true);
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
主活动.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
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.aboutUs:
Intent i = new Intent("com.example.checkbox.ABOUT");
startActivity(i);
break;
case R.id.preferences:
Intent p = new Intent("com.example.checkbox.PREFS");
startActivity(p);
break;
case R.id.exit:
finish();
break;
}
return false;
}
@Override
public void onBackPressed() {
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
关于我们.java
public class AboutUs extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.about);
Button button = (Button)findViewById(R.id.about_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish(); }
}
);}
}
Run Code Online (Sandbox Code Playgroud)
“首先只应选中一个复选框。”
不知道如何使其成为一个简短而简单的答案,但请耐心等待,这很有效。
创建您从活动中调用的首选项活动。
在 onOptionSelected 中使用类似的内容:
case R.id.prefs:
Intent p = new Intent(MainActivity.this, Prefs.class);
startActivity(p);
break;
Run Code Online (Sandbox Code Playgroud)
这是 Prefs.class
public class Prefs extends PreferenceActivity {
CheckBoxPreference splash;
CheckBoxPreference splash_music;
CheckBoxPreference no_splash_music;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
splash = (CheckBoxPreference) findPreference("splash");
splash_music = (CheckBoxPreference) findPreference("splash_music");
no_splash_music = (CheckBoxPreference) findPreference("without_splash_screen");
splash.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(true);
splash_music.setChecked(false);
no_splash_music.setChecked(false);
return true;
}
});
splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(true);
no_splash_music.setChecked(false);
return true;
}
});
no_splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(false);
no_splash_music.setChecked(true);
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记将其添加到清单中:
<activity
android:name="com.lordmarty.testforlools.Prefs"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.lordmarty.testforlools.PREFS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
prefs.xml 文件与您发布的文件相同。
如果您遇到任何错误,请告诉我。我已经测试过了,这里运行得很好。
“第二”
不知道为什么你必须点击两次。但这可能是由于启动未完成而只是调用新意图造成的。无论你从启动时开始你的主类,都可以尝试这个:
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
现在,我检查了你的项目并找出了为什么它如此有问题。
主要原因:
if (music == true)
ourSong.start();
Thread timer = new Thread(){
Run Code Online (Sandbox Code Playgroud)
这里你缺少了 if 语句的括号,导致线程每次都运行。因此,您有两个 MainActivity 同时运行。
其他注意事项:您对所有值都使用“if”。我建议你使用“else if”。
我做了一个小清理。
给你。享受:
您可以通过多种方式解决最后一个问题。其中之一是这样的:
// add this below the other if else if statements in the splass.java
else if(without_splash_screen == false && splash == false && music == false){
//put whatever you want to happen if none of them are checked. This is just an example.
setContentView(R.layout.splash);
setContentView(R.layout.splash);
Thread timer = new Thread() {
public void run() {
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Intent intent = new Intent(Splash.this,
MainActivity.class);
startActivity(intent);
finish();
}
}
};
timer.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |