2025-02-10

 這次我們來學習AlertDialog控件,這次老妖怪們想瞭,不能讓每個妖怪都能看到通輯令啊?得要有個認證權限啊,萬一孫猴子變成小妖怪看到瞭多不好啊,呵呵,這次我們就用AlertDialog控件來做登錄認證功能.先上圖

 


 

 

 

 

 

還是來看main.xml

 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:text="西遊記各主人公通輯令" android:id="@+id/textView1" 
        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
    <ListView android:id="@+id/listView" android:layout_height="wrap_content" 
        android:layout_width="match_parent"></ListView> 
 
    <TextView android:layout_height="wrap_content" 
        android:layout_width="fill_parent" android:text="@string/hello" 
        android:id="@+id/text"></TextView> 
</LinearLayout> 

很簡單,裡面就加瞭個ListView控件,為的是將師徙四人的名字顯示出來

再創建一個login.xml
 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:padding="10dp"> 
    <TextView android:text="賬號" android:layout_width="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:layout_height="wrap_content" android:id="@+id/textView1"></TextView> 
    <EditText android:id="@+id/user" android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
        <requestFocus></requestFocus> 
    </EditText> 
    <TextView android:text="密碼" android:layout_width="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:layout_height="wrap_content" android:id="@+id/textView2"></TextView> 
    <EditText android:id="@+id/pass" android:layout_width="match_parent" 
        android:layout_height="wrap_content" android:inputType="textPassword"></EditText> 
 
</LinearLayout> 

這個界面是區配Dialog中的顯示視圖的

最後再創建一個image.xml

 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:weightSum="1"> 
    <ImageView android:id="@+id/imageView1" android:src="@drawable/bajie" 
        android:layout_width="160dp" android:layout_gravity="center" 
        android:scaleType="centerCrop" android:layout_height="155dp"></ImageView> 
</LinearLayout> 
OK,layout都創建好瞭,現在就主java代碼瞭:

 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class ButtonDemoActivity extends Activity 

    private TextView text = null; 
    private int[] image = { R.drawable.tangseng, R.drawable.wukong, 
            R.drawable.bajie, R.drawable.shaseng }; 
    private String[] item = { "唐僧", "孫悟空 ", "豬八戒", "沙和尚" }; 
    private ListView listView; 
    protected int position_int; 
 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        // 通過ID查找到main.xml中的TextView控件 
        text = (TextView) findViewById(R.id.text); 
 
        // 通過ID查找到main.xml中的ListView控件 
        listView = (ListView) findViewById(R.id.listView); 
 
        // 設置ListView適配器 
        ArrayAdapter adapter = new ArrayAdapter(this, 
                android.R.layout.simple_list_item_1, item); 
 
        listView.setAdapter(adapter); 
 
        // 設置ListView單項選擇監聽器 
        listView.setOnItemClickListener(new OnItemClickListener() 
        { 
 
            @Override 
            public void onItemClick(AdapterView<?> arg0, View arg1, 
                    int position, long arg3) 
            { 
                String str = item[position]; 
                updateText(str); 
                // 將點擊的位置參數傳遞給全局變量 
                position_int = position; 
                // 顯示登錄框 
                dialog_show(); 
 
            } 
        }); 
 
    } 
 
    /**
     * 登錄框
     */ 
    protected void dialog_show() 
    { 
        // 將Layout中的login.xml匹配給視圖控件 
        LayoutInflater inflater = LayoutInflater.from(this); 
        final View view = inflater.inflate(R.layout.login, null); 
        // 創建Dialog 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setTitle("登錄框"); 
        builder.setView(view); 
        builder.setPositiveButton("登錄", new OnClickListener() 
        { 
 
            @Override 
            public void onClick(DialogInterface dialog, int which) 
            { 
                // 取得login.xml中的賬號EditText和密碼EditText控件 
                EditText user = (EditText) view.findViewById(R.id.user); 
                EditText pass = (EditText) view.findViewById(R.id.pass); 
                // 取得兩個控件中的值 
                String user_str = user.getText().toString(); 
                String pass_str = pass.getText().toString(); 
                // 驗證賬號和密碼 
                validate(user_str, pass_str); 
 
            } 
        }); 
        builder.setNegativeButton("取消", new OnClickListener() 
        { 
 
            @Override 
            public void onClick(DialogInterface dialog, int which) 
            { 
                dialog.dismiss(); 
            } 
        }); 
        // 這個很重要的,是dialog的顯示功能,如果這個沒有的話,是不會顯示出來的 
        builder.show(); 
 
    } 
 
    /**
     * 驗證賬號和密碼
     * 
     * @param user_str
     *            賬號
     * @param pass_str
     *            密碼
     */ 
    protected void validate(String user_str, String pass_str) 
    { 
        if ("admin".equals(user_str) && "admin".equals(pass_str)) 
        { 
            image_dialog(); 
        } else 
        { 
            Toast.makeText(this, "您的密碼不對,請重新輸入", 1).show(); 
        } 
 
    } 
     
    /**
     * 圖片Dialog顯示功能
     */ 
    private void image_dialog() 
    { 
        //同上一樣,是取得Layout中的image.xml模板 
        LayoutInflater inflater = LayoutInflater.from(this); 
        View view = inflater.inflate(R.layout.image, null); 
        //取得image.xml中的ImageView控件 
        ImageView imageView = (ImageView) view.findViewById(R.id.imageView1); 
        //設置ImagView控件顯示的圖片ID 
        imageView.setImageResource(image[position_int]); 
        //創建Dialog 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setTitle(item[position_int]); 
        builder.setView(view); 
        builder.setPositiveButton("確定", new OnClickListener() 
        { 
 
            @Override 
            public void onClick(DialogInterface dialog, int which) 
            { 
                dialog.dismiss(); 
            } 
        }); 
        builder.show(); 
 
    } 
 
    private void updateText(String string) 
    { 
        // 將文本信息設置給TextView控件顯示出來 
        text.setText(string); 
    } 
 

OK,其實這裡面Dialog主要是怎樣載入Layout中的模板,如果學會瞭這個,那隨便什麼樣的內容或是模板都可以給Dialog來顯示,總得來說Dialog還是比較方便的,這一章就結束瞭,謝謝

 

摘自:kangkangz4的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *