标签:android style io ar os 使用 sp java on
现在随便下载一个app,打开都有一个Splash界面,为什么一进去就有一个splash界面呢?其实用户打开你的产品,希望用最少的信息给用户最多的信息量,让用户知道这是一款什么产品,这是说产品方面的,还有一个是功能方面的,比如数据库的拷贝,版本更新,还有一个重要的就是展示该公司的logo等等,现在的移动互联网相当于pC端对产品的体验更讲究,我们现在发现一个很好的产品它未必能马上能给这公司盈利,但是用户量大时,表示用户对你的产品认可,那么公司融资就比较简单了,废话不多说
如果splash什么都不做,一般都是过几秒进入主界面,代码如下:
public class SplashActivity extends Activity { private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); handler.postDelayed(new Runnable() { @Override public void run() { loadUI(); } }, 5000); } protected void loadUI() { Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); } }
那么在我们的这个怎么判断呢?我们看loadUI()方法其实在Runnable接口中执行,也就是这个方法封装在Runnable接口中,使用的是匿名内部类,现在我们不使用匿名对象,直接创建对象,然后再判断这个对象,解决方案代码如下:
public class SplashActivity extends Activity { private Handler handler = new Handler(); private Runnable runnbale ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); runnbale = new Runnable() { @Override public void run() { loadUI(); } }; handler.postDelayed(runnbale, 5000); } protected void loadUI() { Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP) { Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); //如果之前创建了Runnable对象,那么就把这任务移除 if(runnbale!=null){ handler.removeCallbacks(runnbale); } } return super.onTouchEvent(event); } }
还有一种方案就要设计到Activity的启动模式了,我们是连续启动2个一样的activity,而activity有一种启动模式为singleTop,就是当启动的activity在栈顶时就不会再启动这个activity,我们设置下试试,
ok,设计这个android:launchMode = "singleTop" 问题也可以解决了!
Android Splash界面支持用户点击 直接进入主界面
标签:android style io ar os 使用 sp java on
原文地址:http://blog.csdn.net/coderinchina/article/details/41865431