Android開發2:事件處理及實現簡單的對話框

来源:http://www.cnblogs.com/yanglh6-jyx/archive/2016/10/30/Android_Activity_Toast_AlertDialog_Snackbar_TextInputLayout.html
-Advertisement-
Play Games

前言 啦啦啦~又要和大家一起學習Android開發啦,博主心裡好激動噠~ 在上篇博文中,我們通過線性佈局和基礎組件的使用,完成了一個簡單的學生課外體育積分電子認證系統的界面,本篇博文,將和大家一起熟悉Button、RadioButton、EditText等基本控制項,探討能夠處理這些控制項的基本事件,學 ...


 

前言

  啦啦啦~又要和大家一起學習Android開發啦,博主心裡好激動噠~

  在上篇博文中,我們通過線性佈局和基礎組件的使用,完成了一個簡單的學生課外體育積分電子認證系統的界面,本篇博文,將和大家一起熟悉Button、RadioButton、EditText等基本控制項,探討能夠處理這些控制項的基本事件,學會彈出基本的對話框,能夠定製對話框中的內容,能對確定和取消按鈕的事件做處理。

 

基礎知識

 

1、在 java 文件中引用佈局文件中的控制項

  在上一次實驗中,在onCreateView(Bundle savedInstanceState) 方法中調用 setContentView()方法將佈局載入進來。如果需要用到佈局中的某些控制項的話,首先需要給控制項一個 id:

  

  定義 id 的語法和引用資源類似,@+id/id 名稱,在同一個佈局文件中不允許有重覆的 id, 即使是不同控制項也不行,但是不同的佈局文件中可以使用同一個 id之後在 java 文件中將佈局載入之後,也就是 setContentView()之後,使用 findViewById() 方法可以獲得該控制項:

  

   findViewById()方法帶一個參數,就是剛剛定義的那個 id,參數形式為 R.id.XXX,其中 XXX 就是剛剛定義的那個 id,由於 findViewById()方法返回的是一個 View 類型,所以需要 強制類型轉換為 Button 類型。

   獲得這個 Button 之後,就可以對這個 Button 進行後續的操作了。 

 

2、彈出 Toast 信息

Toast在APP開發中會經常用到,自己在開發測試中也會用到,測試在還會Logcat視窗顯示。 


Toast的主要方法: 
cancel 方法:關閉Toast視圖 
getDuration 方法:獲取持續時間 
getGravity 方法:獲取Toast視圖的位置 
makeText 方法:生成標準Toast 
setView 方法:設置顯示的View物件 
getView 方法:獲取View對象 
setGravity 方法:設置顯示位置 
getXOffset 方法:獲取水平方向偏移量 
getYOffset 方法:獲取垂直方向偏移量 
setDuration 方法:設置持續時間 
setText 方法:設置顯示的文本內容 
show 方法:顯示提示

在需要彈出 Toast 信息的地方,寫上:

  這個方法帶三個參數,context,text,duration。context 是一個上下文類型,寫上使用 這個方法的 java 類名加上.this 即可,text 是 Toast 要顯示的信息,duration 是 Toast 顯 示的時間長度,有 Toast.LENGTH_SHORT 和 Toast.LENGTH_LONG 可選,最後記得調用 show() 方法將 Toast 顯示出來。

主要包含3種形式的Toast: 
1、標準形式 
2、設置位置形式 
3、帶圖片的Toast

函數代碼如下:

MainActivity .java

import java.io.InputStream;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

@SuppressLint("ShowToast")
public class MainActivity extends Activity {
    Toast   toast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //初始化Toast的主要作用是,在點擊按鈕是可以先立刻消除上一個toast
        toast=Toast.makeText(getApplicationContext(), "", 0);;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void Button1(View v){
        toast.cancel(); 
        toast=Toast.makeText(getApplicationContext(), "系統預設的樣式", 1);

        toast.show();
    }  

    public void Button2(View v){
        //清除上一個toast,不會有顯示延遲,更加美觀。不知道這種方法是否好,如果好請留言,學習學習。
        toast.cancel(); 
        toast=Toast.makeText(getApplicationContext(), "設置Toast顯示的位置", 1);
        toast.setGravity(Gravity.CENTER, 0, 0);

        toast.show();
        }
    public void Button3(View v){
        toast.cancel(); 
        toast=Toast.makeText(getApplicationContext(), "設置Toast顯示圖片和位置", 1);
        toast.setGravity(Gravity.CENTER, 0, 0);
        LinearLayout LinearToast = (LinearLayout) toast.getView();
        LinearToast.setOrientation(LinearLayout.HORIZONTAL);
        ImageView image = new ImageView(getApplicationContext());
        //為了美觀,將圖片縮小為原來的一半
        InputStream is =this.getResources().openRawResource(R.drawable.ic_launcher); 
        BitmapFactory.Options options=new BitmapFactory.Options(); 
        options.inJustDecodeBounds = false; 
        options.inSampleSize = 2;   //width,hight設為原來的二分一 
        Bitmap btp =BitmapFactory.decodeStream(is,null,options);
        image.setImageBitmap(btp);
        LinearToast.addView(image,0);
        toast.show();
    }

}

 

3、事件處理

下麵以 Button 為例簡單介紹一下事件處 理。

  要處理事件,首先要將與該事件有關的控制項引入進來,比如要判斷用戶名是否為空,那麼 除了 Button 需要引入外(因為 Button 是觸發事件的主體),還需要引入用戶名的輸入框。 引入之後,button.setOnClickListener()中做處理,這裡的 button 是一個變數名,記得 換成自己定義的變數名。

  

 

onClick 方法帶的 view 參數是觸發這個單擊事件的控制項的引用,在這個例子中,view 就是 觸發事件的 Button,在 onClick()方法中做事件的處理,例如判斷用戶名是否為空:

關於EditText,Button,RadioGroup各自有的一些方法建議查看API 文檔,不在這裡一一說明瞭。

 

4、簡單對話框的使用

Android 中最基本的對話框是 AlertDialog,之所以說它最簡單,是因為佈局和使用的方法 都很簡單,佈局是寫好的。標題,通過 setTitle()方法設置;圖標,通過setIcon()方法設置; 顯示在中間的主要信息,通過 setMessage() 方法顯示等。

AlertDialog.Builder創建對話框的幾個常用方法:

setTitle() :設置標題
setIcon() :設置圖標
setMessage():設置提示內容
setView() : 設置自定義視圖
setItems() :設置對話框要顯示的一個list
setMultiChoiceItems() :設置對話框顯示的覆選框
setNeutralButton() :普通按鈕

setPositiveButton() :添加"Yes"按鈕
setNegativeButton() :添加"No"按鈕
create() : 創建對話框

show() :顯示對話框

    顯示 一 個 AlertDialog 的基本步驟如下:

 

  (1)創建 AlertDialog.Builder 對象

  (2)調用上面的方法進行設置

  (3)如果需要設置取消按鈕,方法原型如下:

  

  (4)調用 AlertDialog.Builder 的 create() 方法創建 AlertDialog 對象,再調用 AlertDialog 對象的 show()方法將對話框顯示出來。

 

  如果不是很明白可以參考下方的實驗代碼加以理解啦~

 

拓展知識

 

1、Snackbar

  Google 在 2015 年的 IO 大會上發佈了較之前更為詳細的 Material Design 規範和全新的 Android Design Support Library,Snackbar 就是其中的一個控制項,可以用來代替 Toast 信息,除了用戶體驗更好以外,功能也更強大。先來看一下語法:

  

  make方法中的三個參數分別是根佈局,要顯示的消息和時長,這個方法是必須的,之後的方法都不是必須的。定義完之後調用show()方法就可以顯示 Snackbar 了。

  setAction方法使該 Snackbar 右側按鈕可以被點擊並處理一些事件,兩個參數分別是按鈕 顯示的文本以及處理點擊事件的邏輯,形式與 Button 一樣。

  setActionTextColor() 是 設 置 右 側 按 鈕 文 本 的 顏 色 , setDuration() 方 法 可 以 定 義 Snackbar 彈出時間長度,單位為 ms,需要註意的是,當右側按鈕被點擊之後,Snackbar 會立刻消失。

放一下靜態的 Snackbar,實驗材料中的 apk 安裝啟動後,點擊拓展啟動 的界面用的都是 Snackbar,可以看一下動態效果。

在 api 為 19 的模擬器下,按鈕顯示不出來,可能是不支持,換了api 22 的模擬器就好了。

 

2、TextInputLayout

TextInputLayout 也是 Android Design Support Library 中的一個控制項,用於接受用戶輸 入,與 EditText 配合使用有更好的用戶體驗,先放幾張圖:

  一般登錄註冊界面都需要EditText這個控制項來讓用戶輸入信息,同時我們一般會設置一個標簽(使用TextView)和EditText的hint屬性來提示用戶輸入的內容,而設計庫中高級組件TextInputLayout則專門為EditText設計的,即通過使用TextInputLayout包裹EditText實現當用戶開始輸入時hint屬性值將顯示在EditText上面作為一個提示標簽,這個過程還帶有動畫效果,這樣就避免了用戶輸入時輸入提示消失的情況,同時,還可以更好地向用戶提示錯誤輸入信息。

TextInputLayout的兩個功能:

給EditText添加一個帶有動畫效果的提示標簽(利用EditText的hint屬性的值作為提示標簽內容);

處理錯誤輸入,將錯誤輸入提示信息顯示在EditText附近,便於提示用戶更好地完成輸入。

即:

(1) 實現浮動標簽提示效果

  TextInputLayout和FrameLayout一樣都是一個ViewGroup,而TextInputLayout包裹的是EditText,並且會將EditText的Android:hint屬性值作為提示標簽,所以,使用非常簡單,可以看到,TextInputLayout 集合了輸入提示,報錯等功能,並且自帶動畫效果。

(2) 顯示錯誤輸入信息

  TextInputLayout使得我們在驗證輸入數據是可以更加方便地顯示錯誤輸入提示,這樣可以使得輸入更加友好。

對於處理錯誤信息,TextInputLayout提供了兩個方法:

setError(String message):設置錯誤提示信息,這個信息將會顯示在EditText附近。

setErrorEnabled(boolean enabled):設置錯誤信息不可以用,也就是移除setError(String message)添加的錯誤提示信息。

當我們開始在EditText中輸入信息的時候,EditText的hint屬性值將會顯示在EditText上面,並且帶有一個動畫效果,顯示為一個浮動標簽。而且,當輸入的數據格式不對時,還會顯示錯誤提示在EditText下麵。

 

下麵來看一下怎麼實現:

首先是 xml 佈局:

 

一個 TextInputLayout 中只能包含一個 EditText,如果想要在預覽中看到 TextInputLayout 佈局的話,需要在修改對應的 build.gradle 文件中的配置:

 

 

 

在 dependencies 中加上 compile 'com.android.support:design:24.0.0',然後再同步項 目,就可以顯示了:

 

在修改了 build.gradle 文件之後,也可以點擊 Sync Now同步項目。

 

然後在 java 文件中引入 TextInputLayout,通過 TextInputLayout 獲取 EditText 中的內 容:

 

 

TextInputLayout 有特色的一點是可以顯示提示信息:

首先允許使用提示信息 ,然後顯示提示信息,如果想使提示信息消失,設置setErrorEnabled(false)即可。

 

其它方法的話自行查閱 API 文檔。

 

如果不是很明白可以參考下方的實驗代碼加以理解啦~

 

實驗內容

 

實現一個 Android 應用,界面呈現如下效果(界面設計上的要求與實驗一相同): 要求:

(1)該界面為應用啟動後看到的第一個界面

(2)點擊登錄按鈕:

 

如果用戶名為空,彈出 Toast 信息“用戶名不能為空”; 如果密碼為空,彈出 Toast 信息“密碼不能為空”; 如果用戶名輸入為“Android”,密碼為“123456”,彈出如下對話框:

點擊“確定”,彈出 Toast 信息——對話框“確定”按鈕被點擊。,點擊“取消”,彈出 Toast 信息——對話框“取消”按鈕被點擊。

否則,彈出如下對話框:

確定和取消按鈕點擊後效果參見上一個對話框 點擊註冊按鈕:

如果 RadioButton 選中的是“學生”,那麼彈出 Toast 信息“學生身份註冊功能尚未開 啟”,如果選中的是“教師”,那麼彈出 Toast 信息“教師身份註冊功能尚未開啟”,以 此類推。

 

RadioButton 選擇項切換:選擇項切換之後,彈出 Toast 信息“XX 身份被選中”,例如從 學生切換到教師,彈出 Toast 信息“教師身份被選中”。

 

實驗步驟

 

1、基礎內容的實現

在 java 文 件 中 將 布 局 加 載 之 後 , 在 setContentView() 之 後 , 使 用 findViewById()方法可以獲得該控制項,並聲明設置其他類型的元素和類型:

  此次實驗用到的事件處理方法一共兩個,一個是 Button 的 單 擊 事 件 button.setOnClickListener() , 一 個 是 RadioGroup 的 切 換 事 件 radioGroup.setOnCheckedChangeListener()。我們設置 Button 的 單 擊 事 件, button.setOnClickListener() 和 RadioGroup 的 切 換 事 件 , radioGroup.setOnCheckedChangeListener()。 處理事件時將與該事件有關的控制項引入進來,比如要判斷用戶名是否為空,那麼 除了 Button 需要引入外(因為 Button 是觸發事件的主體),還需要引入用戶名 的輸入框。 引入之後在 SetOnClickListener()中做處理。

 

  在需要彈出 Toast 信息的地方,寫上 Toast 的相關代碼。這個方法帶三個 參數 context,text,duration。context 是一個上下文類型,寫上使用 這個 方法的 java 類名加上.this 即可,text 是 Toast 要顯示的信息,duration 是 Toast 顯示的時間長度,有 Toast.LENGTH_SHORT 和 Toast.LENGTH_LONG 可 選,最後調用 show() 方法將 Toast 顯示出來。

 

  Android 中最基本的對話框是 AlertDialog,它的佈局和使用的方法都很簡 單,佈局是寫好的,標題通過 setTitle()方法設置,圖標通過 setIcon()方法 設置,顯示在中間的主要信息通過 setMessage()方法顯示。


  創建 AlertDialog.Builder 對象調用上面的方法進行設置調用 AlertDialog.Builder的create() 方法創建 AlertDialog 對象 , 再調用 AlertDialog 對象的 show()方法將對話框顯示出來:

 

2、拓展內容的實現:

  在基礎實驗上的結構和初始聲明的基礎上,在聽取大神們的完成經驗後,先完成 TextInputLayout 部分的內容。首先,按照要求,在 xml 佈局文件中對 EditText 部 分 進 行 修 改 , 使 用 TextInputLayout 。 TextInputLayout 和 FrameLayout 一樣都是一個 ViewGroup,而 TextInputLayout 包裹的是 EditText, 並且會將 EditText 的 Android:hint 屬性值作為提示標簽用 TextInputLayout 包裹 EditText 並給 EditText 設置了 hint 屬性後,這個 EditText 就帶有了浮動 提示標簽的效果:

然後在修改對應的 build.gradle 文件中的配置。


  在 java 文件中引入 TextInputLayout,通過 TextInputLayout 獲取 EditText 中的內容。在這之前需要對我們需要的兩個元素進行聲明:

  


  然後獲取 EditText 中的內容:


  在登錄按鈕的監聽事件中按照要求實現所需功能:

  

  此外需要註意的是:TextInputLayout 使得我們在驗證輸入數據是可以更加 方便地顯示錯誤輸入提示,這樣可以使得輸入更加友好。

  對於處理錯誤信息,TextInputLayout 提供了兩個方法: setError(String message):設置錯誤提示信息,這個信息將會顯示在EditText 附近。

  setErrorEnabled(boolean enabled):設置錯誤信息不可以用,也就是移除 setError(String message)添加的錯誤提示信息。

  顯示提示信息 , 符合要求需使提示信息消失,可以在相應位置設置 setErrorEnabled(false)。

  對於Snackbar,make 方法中的三個參數分別是根佈局,要顯示的消息和時 長,這個方法是必須的,定義完之後調用 show()方法就可以顯示 Snackbar。


  而 setAction 方法使該 Snackbar 右側按鈕可以被點擊並處理一些事件,兩 個參數分別是按鈕顯示的文本以及處理點擊事件的邏輯,形式與 Button 一樣。

  

  完成實驗~

 

實驗完整代碼

  如下(兩個部分的XML佈局代碼相同,都和上次實驗的佈局代碼相同):

(1)基礎部分

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorWhite"
    android:orientation="vertical">

    <TextView
        android:id="@+id/SYSUTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:text="@string/sysu"
        android:textSize="20sp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/sysuImage"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"
        android:contentDescription="@string/app_name"
        android:src="@mipmap/sysu" />


    <android.support.design.widget.TextInputLayout
        android:id="@+id/more_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp">

        <EditText
            android:id="@+id/editTextUsername"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:hint="@string/username2"
            android:inputType="textPersonName" />

    </android.support.design.widget.TextInputLayout>


    <android.support.design.widget.TextInputLayout
        android:id="@+id/more_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp">

        <EditText
            android:id="@+id/editTextPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:hint="@string/password2"
            android:inputType="textPassword" />

    </android.support.design.widget.TextInputLayout>


    <RadioGroup
        android:id="@+id/radio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/radioStu"
            style="@style/radioButtonStyle"
            android:checked="true"
            android:text="@string/student" />

        <RadioButton
            android:id="@+id/radioTeacher"
            style="@style/radioButtonStyle"
            android:text="@string/teacher" />

        <RadioButton
            android:id="@+id/radioCorporation"
            style="@style/radioButtonStyle"
            android:text="@string/corporation" />

        <RadioButton
            android:id="@+id/radioManager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/manager"
            android:textSize="@dimen/etWordSp" />

    </RadioGroup>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/login"
            style="@style/Button"
            android:layout_marginRight="5dp"
            android:text="@string/signIn" />

        <Button
            android:id="@+id/register"
            style="@style/Button"
            android:text="@string/register" />

    </LinearLayout>

</LinearLayout>

MainActivity.java

package com.example.yanglh6.myapplication1;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private RadioGroup radio = null;
    private RadioButton radioStu = null;
    private RadioButton radioTeacher = null;
    private RadioButton radioCorporation = null;
    private RadioButton radioManager = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);
        Button buttonLogin = (Button) findViewById(R.id.login);
        Button buttonRegister = (Button) findViewById(R.id.register);
        final EditText editTextUsername = (EditText) findViewById(R.id.editTextUsername);
        final EditText editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        radio = (RadioGroup) findViewById(R.id.radio);
        radioStu = (RadioButton) findViewById(R.id.radioStu);
        radioTeacher = (RadioButton) findViewById(R.id.radioTeacher);
        radioCorporation = (RadioButton) findViewById(R.id.radioCorporation);
        radioManager = (RadioButton) findViewById(R.id.radioManager);

        buttonLogin.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (TextUtils.isEmpty(editTextUsername.getText().toString())) {
                    Toast.makeText(MainActivity.this, "用戶名不能為空", Toast.LENGTH_SHORT).show();
                } else if (TextUtils.isEmpty(editTextPassword.getText().toString())) {
                    Toast.makeText(MainActivity.this, "密碼不能為空", Toast.LENGTH_SHORT).show();
                } else if (editTextUsername.getText().toString().equals("Android") && editTextPassword.getText().toString().equals("123456")) {
                    new AlertDialog.Builder(MainActivity.this)
                            .setTitle("提示")
                            .setMessage("登錄成功")
                            .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    Toast.makeText(MainActivity.this, "對話框\"確定\"按鈕被點擊", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    Toast.makeText(MainActivity.this, "對話框\"取消\"按鈕被點擊", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .create()
                            .show();

                } else {
                    new AlertDialog.Builder(MainActivity.this)
                            .setTitle("提示")
                            .setMessage("登錄失敗")
                            .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    Toast.makeText(MainActivity.this, "對話框\"確定\"按鈕被點擊", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    Toast.makeText(MainActivity.this, "對話框\"取消\"按鈕被點擊", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .create()
                            .show();
                }
            }

        });

        radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == radioStu.getId()) {
                    Toast.makeText(MainActivity.this, "學生身份被選中", Toast.LENGTH_SHORT).show();
                }
                if (checkedId == radioTeacher.getId()) {
                    Toast.makeText(MainActivity.this, "教師身份被選中", Toast.LENGTH_SHORT).show();
                }
                if (checkedId == radioCorporation.getId()) {
                    Toast.makeText(MainActivity.this, "社團身份被選中", Toast.LENGTH_SHORT).show();
                }
                if (checkedId == radioManager.getId()) {
                    Toast.makeText(MainActivity.this, "管理者身份被選中", Toast.LENGTH_SHORT).show();
                }
            }
        });

        buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio);
                int checkedId = radioGroup.getCheckedRadioButtonId();
                if (checkedId == R.id.radioStu) {
                    Toast.makeText(MainActivity.this, "學生身份註冊功能尚未開啟", Toast.LENGTH_SHORT).show();
                } else if (checkedId == radioTeacher.getId()) {
                    Toast.makeText(MainActivity.this, "教師身份註冊功能尚未開啟", Toast.LENGTH_SHORT).show();
                } else if (checkedId == radioTeacher.getId()) {
                    Toast.makeText(MainActivity.this, "社團身份註冊功能尚未開啟", Toast.LENGTH_SHORT).show();
                } else if (checkedId == radioCorporation.getId()) {
                    Toast.makeText(MainActivity.this, "管理者身份註冊功能尚未開啟", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

(2)拓展部分

MainActivity.java

package com.example.yanglh6.myapplication1;

import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private RadioGroup radio = null;
    private RadioButton radioStu = null;
    private RadioButton radioTeacher = null;
    private RadioButton radioCorporation = null;
    private RadioButton radioManager = null;
    private TextInputLayout usernameText;
    private TextInputLayout passwordText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);

        usernameText = (TextInputLayout) findViewById(R.id.more_username);
        passwordText = (TextInputLayout) findViewById(R.id.more_password);
        Button buttonLogin = (Button) findViewById(R.id.login);
        final Button buttonRegister = (Button) findViewById(R.id.register);
        final EditText editTextUsername = (EditText) findViewById(R.id.editTextUsername);
        final EditText editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        radio = (RadioGroup) findViewById(R.id.radio);
        radioStu = (RadioButton) findViewById(R.id.radioStu);
        radioTeacher = (RadioButton) findViewById(R.id.radioTeacher);
        radioCorporation = (RadioButton) findViewById(R.id.radioCorporation);
        radioManager = (RadioButton) findViewById(R.id.radioManager);

        buttonLogin.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                String usernameEdit = usernameText.getEditText().getText().toString().trim();
                String passwordEdit = passwordText.getEditText().getText().toString().trim();
                if (TextUtils.isEmpty(editTextUsername.getText().toString())) {
                    usernameText.setErrorEnabled(true);
                    usernameText.setError("用戶名不能為空");
                    return;
                } else {
                    usernameText.setErrorEnabled(false);
                }
                if (TextUtils.isEmpty(editTextPassword.getText().toString())) {
                    passwordText.setErrorEnabled(true);
                    passwordText.setError("密碼不能為空");
                    return;
                } else {
                    passwordText.setErrorEnabled(false);
                }
                if (editTextUsername.getText().toString().equals("Android") && editTextPassword.getText().toString().equals("123456")) {
                    Snackbar.make(getWindow().getDecorView(), "登錄成功", Snackbar.LENGTH_SHORT)
                            .setAction("按鈕", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(MainActivity.this, "Snackbar的按鈕被點擊了", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .show();
                } else {
                    Snackbar.make(getWindow().getDecorView(), "登錄失敗", Snackbar.LENGTH_SHORT)
                            .setAction("按鈕", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(MainActivity.this, "Snackbar的按鈕被點擊了", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .show();

                }
            }
        });

        radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == radioStu.getId()) {
                    Snackbar.make(getWindow().getDecorView(), "學生身份被選中", Snackbar.LENGTH_SHORT)
                            .setAction("按鈕", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(MainActivity.this, "Snackbar的按鈕被點擊了", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .setDuration(5000)
                            .show();
                }
                if (checkedId == radioTeacher.getId()) {
                    Snackbar.make(getWindow().getDecorView(), "教師身份被選中", Snackbar.LENGTH_SHORT)
                            .setAction("按鈕", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(MainActivity.this, "Snackbar的按鈕被點擊了", Toast.LENGTH_SHORT).show();
                                }
                            })
                            .setDuration(5000)
                            .show();
                }
                if (checkedId == radioCorporation.getId()) {
                    Snackbar.make(getWindow().getDecorView(), "社團身份被選中", Snackbar.LENGTH_SHORT)
                            .setAction("按鈕", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(MainActivity.this, "Snack

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 看到一些曾經只會灌水的網友,在學習了前端之後,已經能寫出下載量幾千幾萬的腳本、樣式,幫助大眾,成為受歡迎的人,感覺滿羡慕的。我也想學會前端技術,變得受歡迎呀。於是心血來潮,開始學習前端知識,並寫下了這個小練習。 基本思路是這樣的: 效果圖: 代碼如下: 點我進入線上版 這算是自己學習Javascri ...
  • 一:時間轉時間戳:javascript獲得時間戳的方法有四種,都是通過實例化時間對象 new Date() 來進一步獲取當前的時間戳 1.var timestamp1 = Date.parse(new Date()); // 結果:1477808630000 不推薦這種辦法,毫秒級別的數值被轉化為0 ...
  • 2016-10-30 13:11:56 引言 最近做項目,發現ajax請求不能在伺服器中直接重定向到登錄頁面。查了些資料發現jquery的ajax請求有人給出了方法。但是webix的ajax請求和jquery的有些區別。這裡模仿jquery的處理方式實現webix的ajax請求session超時跳轉 ...
  • 前言 啦啦啦~博主又來騷擾大家啦~大家是不是感覺上次的Android開發博文有點長呢~主要是因為博主也是小白,在做實驗的過程中查詢了很多很多概念,努力去理解每一個知識點,才完成了最終的實驗。還有就是隨著我們的實驗的進行,代碼量也會越來越多,所以在接下來的博文中會對源碼進行取捨,而不會把全部的實驗代碼 ...
  • 1.三級緩存設計步驟: * 從記憶體中取圖片 * 從本地文件中取圖片 向記憶體中保持一份 * 請求網路圖片,獲取圖片,顯示到控制項上 * 向記憶體存一份 * 向本地文件中存一份 2.網路緩存 線程池類Executors的使用 public static ExecutorService newCachedTh ...
  • 1.關聯庫 compile 'com.android.support:design:23.3.0' 2.佈局寫上TabLayout 3.TabLayout和ViewPager關聯 4.解決TabLayout和ViewPagerIndicator的相容問題 4.1 <activity android: ...
  • 學習完第一行代碼後,繼續學習Android群英傳,希望能堅持下去,好好學習完這本書,並及時做好相關筆記,鞏固相關知識; 一. View的介紹: 1`.我們先來看下view樹結構: 2.樹結構內容: a.viewparent是整棵樹的核心,它統一調度和分配所有的交互管理事件。 b.控制項分為viewgr ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...