zoukankan      html  css  js  c++  java
  • 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 }

      

  • 相关阅读:
    数据结构算法
    C++字符串完全指引之二 —— 字符串封装类
    gethostbyname根据主机名获得地址方法
    通过注册表来限定程序的使用时限
    查询图像上的匹配块
    VC++6.0中内存泄漏检测
    qsort 浅析
    shell 中数学计算总结
    最新感悟基础才是王道
    条件表达式中的匹配
  • 原文地址:https://www.cnblogs.com/wanderingzj/p/4928460.html
Copyright © 2011-2022 走看看