没点击跳过自然进入主页,点击跳过之后立即进入主页
1.欢迎页布局activity_sp.xml放一张背景图(图片随你便啦)再放一个盛放倒计时的TextView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/a"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:textSize="20sp" /> </RelativeLayout> </LinearLayout>
2.主要java代码
package com.cwj.test; import android.content.Intent; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.TextView; import java.util.Timer; import java.util.TimerTask; public class SpActivity extends AppCompatActivity implements View.OnClickListener { private int recLen = 5;//跳过倒计时提示5秒 private TextView tv; Timer timer = new Timer(); private Handler handler; private Runnable runnable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //定义全屏参数 int flag= WindowManager.LayoutParams.FLAG_FULLSCREEN; //设置当前窗体为全屏显示 getWindow().setFlags(flag, flag); setContentView(R.layout.activity_sp); initView(); timer.schedule(task, 1000, 1000);//等待时间一秒,停顿时间一秒 /** * 正常情况下不点击跳过 */ handler = new Handler(); handler.postDelayed(runnable = new Runnable() { @Override public void run() { //从闪屏界面跳转到首界面 Intent intent = new Intent(SpActivity.this, MainActivity.class); startActivity(intent); finish(); } }, 5000);//延迟5S后发送handler信息 } private void initView() { tv = findViewById(R.id.tv);//跳过 tv.setOnClickListener(this);//跳过监听 } TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { // UI thread @Override public void run() { recLen--; tv.setText("跳过 " + recLen); if (recLen < 0) { timer.cancel(); tv.setVisibility(View.GONE);//倒计时到0隐藏字体 } } }); } }; /** * 点击跳过 */ @Override public void onClick(View view) { switch (view.getId()) { case R.id.tv: //从闪屏界面跳转到首界面 Intent intent = new Intent(SpActivity.this, MainActivity.class); startActivity(intent); finish(); if (runnable != null) { handler.removeCallbacks(runnable); } break; default: break; } } }
这里style里改了样式,没有标题栏Theme.AppCompat.Light.NoActionBar
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
补充:
Android程序跳过登录界面直接进入主界面(自动登录)
首先是欢迎界面的代码
public class WelcomeActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome); /** * 延迟3秒进入主界面 */ new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent=new Intent(WelcomeActivity.this,LoginActivity.class); startActivity(intent); WelcomeActivity.this.finish(); } },1000*3); } }
接下来是文章的主要内容。实现自动登录的关键是当程序从欢迎界面跳转到登录界面是,在登录界面还没有加载布局文件时判断是否登陆过,从而实现直接跳转到主界面。这里我们采用SharedPreferences来保存登录状态。代码如下:
public class LoginActivity extends Activity{ SharedPreferences sprfMain; SharedPreferences.Editor editorMain; Button login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在加载布局文件前判断是否登陆过 sprfMain= PreferenceManager.getDefaultSharedPreferences(this); editorMain=sprfMain.edit(); //.getBoolean("main",false);当找不到"main"所对应的键值是默认返回false if(sprfMain.getBoolean("main",false)){ Intent intent=new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); LoginActivity.this.finish(); } setContentView(R.layout.login); login= (Button) findViewById(R.id.login); //这里只是简单用按键模拟登录功能 login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(LoginActivity.this,MainActivity.class); editorMain.putBoolean("main",true); editorMain.commit(); startActivity(intent); LoginActivity.this.finish(); } }); } }
接下来是实现注销后要重新进入登录界面
public class MainActivity extends AppCompatActivity { SharedPreferences sprfMain; SharedPreferences.Editor editorMain; Button exit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); exit= (Button) findViewById(R.id.exit); exit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //点击注销按键后调用LoginActivity提供的resetSprfMain()方法执行editorMain.putBoolean("main",false);,即将"main"对应的值修改为false resetSprfMain(); Intent intent=new Intent(MainActivity.this,WelcomeActivity.class); startActivity(intent); MainActivity.this.finish(); } }); } public void resetSprfMain(){ sprfMain= PreferenceManager.getDefaultSharedPreferences(this); editorMain=sprfMain.edit(); editorMain.putBoolean("main",false); editorMain.commit(); } }