LoginActivity实现
参考:《第一行代码》
1.首先new一个LoginActivity继承Activity
1 public class LoginActivity extends Activity
2.重写OnCreate方法
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 }
3.使登录界面全屏并隐藏标题栏,这行代码一定要在setContentView()之前执行
1 requestWindowFeature(Window.FEATURE_NO_TITLE);
4.用setContentView加载布局
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 5 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 6 setContentView(R.layout.activity_login);
7 }
5.在活动中使用Toast返回一些短小的消息给用户,比如登录失败。Toast方法非常简单,通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以了。makeText()方法需要三个参数,第一个参数是Context,也就是Toast要求的上下文,这里写上getApplicationContext(),由于活动本身就是一个Context对象,因此也可以在这里直接传入LoginActivit.this。第二个参数是Toast显示的文本内容,第三个参数是Toast显示的时长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
1 Toast.makeText(getApplicationContext(), "用户名或者密码错误", Toast.LENGTH_SHORT).show();
6.可以通过findViewById()方法获取到在布局文件中定义的元素,这里我们传入R.id.***,代码如下:
1 private Button login_btn; 2 login_btn = (Button) findViewById(R.id.login_btn);
7.我们可以通过调用setOnClickListener方法为按钮注册一个监听器,点击按钮就会执行监听器中的方法。
1 login_btn.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 } 5 });
8.使用Intent在各活动之间穿梭,Intent方法大致分为两种显式Intent和隐式Intent。我们先看看显式Intent,Intent的构造函数Intent(Context packageContext, Class<?> cls),第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。
1 Intent intent = new Intent(LoginActivity.this, NaviActivity.class); 2 startActivity(intent);
隐式Intent则不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并帮我们找出合适的活动去启动。我们在AndroidManifest.xml文件的<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。
1 <activity 2 android:name=".NaviActivity" 3 android:label="@string/app_name" > 4 <intent-filter> 5 <action android:name="com.example.activitynavi.ACTION_START" /> 6 <category android:name="android.intent.category.DEFAULT" /> 7 </intent-filter> 8 </activity>
在这里我们还可以看到主活动的<activity>标签
1 <activity 2 android:name=".LoginActivity" 3 android:label="@string/app_name" > 4 <intent-filter> 5 <action android:name="android.intent.action.MAIN" /> 6 7 <category android:name="android.intent.category.LAUNCHER" /> 8 </intent-filter> 9 </activity>
隐式的方式下我们启动一个activity需要Intent的另一个构造函数
1 Intent intent = new Intent(“com.example.wanderingzj.stumanage.ACTION_START”); 2 startActivity(intent);
只有在<action>和<category>标签同时匹配Intent中指定的action和category时,这个活动才能启动,由于这里设置的是android.intent.category.DEFAULT是一种默认category所以在调用startActivity()时,会自动将这个category添加到Intent中。
每个Intent中只能指定一个action,但可以指定多个category,所以还可以这样写:
1 <activity 2 android:name=".NaviActivity" 3 android:label="@string/app_name" > 4 <intent-filter> 5 <action android:name="com.example.wanderingzj.stumanage.ACTION_START" /> 6 <category android:name="android.intent.category.DEFAULT" /> 7 <category android:name="com.example.wanderingzj.stumanage.MY_CATEGORY"/> 8 </intent-filter> 9 </activity
1 Intent intent = new Intent("com.example.wanderingzj.stumanage.ACTION_START"); 2 intent.addCategory("com.example.wanderingzj.stumanage.MY_CATEGORY") 3 startActivity(intent);
在打开NaviActivity的同时,我们需要把LoginActivity里选择的权限传过去,这里我们就需要用Intent传递参数,我们可以使用Intent的putExtra方法,putExtra()方法第一个参数是键,第二个参数是真正要传递的数
1 Intent intent = new Intent("com.example.wanderingzj.stumanage.ACTION_START"); 2 int authorization; 3 if ( stu_rb.isChecked()) { 4 authorization = 0; 5 }else{ 6 authorization = 1; 7 } 8 intent.putExtra("Authorization", authorization); 9 startActivity(intent);
在NaviActivity中,我们需要把值取出来,首先可以通过getIntent()方法获取用于启动NaviActivity的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数值了。
1 Intent oldpager = getIntent(); 2 int num = oldpager.getIntExtra("Authorization", 0);
到这里初步的LoginActivity就完成了,后续还会增加很多东西,比如数据库连接等。Android要学的东西还有很多啊~~
目前的LoginActivity代码:
1 package com.example.wanderingzj.stumanage; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.graphics.Color; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.view.Window; 9 import android.view.WindowManager; 10 import android.widget.Button; 11 import android.widget.EditText; 12 import android.widget.RadioButton; 13 import android.widget.Toast; 14 15 /** 16 * Created by samsung on 2015/10/28. 17 */ 18 public class LoginActivity extends Activity{ 19 //定义控件名 20 private EditText pwd_edt; 21 private EditText username_edt; 22 private RadioButton stu_rb; 23 private RadioButton teacher_rb; 24 private Button login_btn; 25 26 //定义一个新的Intent活动,以跳转到新界面 27 private Intent newpager; 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 requestWindowFeature(Window.FEATURE_NO_TITLE); 33 setContentView(R.layout.activity_login); 34 35 pwd_edt = (EditText) findViewById(R.id.pwd_edt); 36 username_edt = (EditText) findViewById(R.id.username_edt); 37 stu_rb = (RadioButton) findViewById(R.id.stu_rB); 38 teacher_rb = (RadioButton) findViewById(R.id.teacher_rB); 39 login_btn = (Button) findViewById(R.id.login_btn); 40 41 //设置控件的背景色 42 pwd_edt.setBackgroundColor(Color.WHITE); 43 username_edt.setBackgroundColor(Color.WHITE); 44 45 //按钮监听器 46 login_btn.setOnClickListener(new View.OnClickListener() { 47 @Override 48 public void onClick(View v) { 49 if (pwd_edt.getText().toString().equals("0") && username_edt.getText().toString().equals("0")){ 50 //登录成功后跳转到新界面 51 newpager = new Intent("com.example.wanderingzj.stumanage.ACTION_START"); 52 int authorization; 53 if ( stu_rb.isChecked()) { 54 authorization = 0; 55 }else{ 56 authorization = 1; 57 } 58 newpager.putExtra("Authorization", authorization); 59 startActivity(newpager); 60 }else { 61 Toast.makeText(getApplicationContext(), "用户名或者密码错误", Toast.LENGTH_SHORT).show(); 62 } 63 } 64 }); 65 } 66 }