Android UI系列-----時間、日期、Toasts和進度條Dialog


您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。 

如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦   

如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 501395377@qq.com  / lzp501395377@gmail.com

如果需要轉載,請注明出處,謝謝!!

本篇隨筆將繼續學習Android UI系列中的Dialog,包括DatePickerDialog、TimePickerDialog、Toasts以及ProgressDialog。下面讓我們來看看這幾種不同的Dialog對話框的使用.

一、DatePickerDialog和TimePickerDialog

DatePickerDialog和TimePickerDialog是Android提供的可以彈出一個日期、時間選擇的對話框,我們可以在程序中通過實例化DatePickerDialog和TimePickerDialog來得到一個日期、時間對話框。這兩個類都是AlertDialog的子類:

java.lang.Object
   ↳     android.app.Dialog
         ↳     android.app.AlertDialog
               ↳     android.app.DatePickerDialog


java.lang.Object
   ↳     android.app.Dialog
         ↳     android.app.AlertDialog
               ↳     android.app.TimePickerDialog

這兩個控件的使用非常的簡單,下面我們直接通過例子來看看DatePickerDialog和TimePickerDialog的使用:

我們在布局上定義兩個Button和兩個EditText,當點擊第一個按鈕,彈出一個DatePickerDialog,並得到選擇的日期顯示在第一個EditText上,點擊第二個按鈕,彈出一個TimePickerDialog,得到選擇的時間顯示在第二個EditText上。

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="99dp"
        android:text="DatePickerDialog" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="29dp"
        android:ems="10" >
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="31dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:text="TimePickerDialog" />

</RelativeLayout>

MainActivity類:

public class MainActivity extends Activity
{
    private Button button;
    private Button button2;
    private EditText editText;
    private EditText editText2;
    private int year, monthOfYear, dayOfMonth, hourOfDay, minute;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button1);
        button2 = (Button)findViewById(R.id.button2);
        editText = (EditText)findViewById(R.id.editText1);
        editText2 = (EditText)findViewById(R.id.editText2);
        
        Calendar calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        monthOfYear = calendar.get(Calendar.MONTH);
        dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
        minute = calendar.get(Calendar.MINUTE);
        
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                /**
                 * 實例化一個DatePickerDialog的對象
                 * 第二個參數是一個DatePickerDialog.OnDateSetListener匿名內部類,當用戶選擇好日期點擊done會調用里面的onDateSet方法
                 */
                DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear,
                            int dayOfMonth)
                    {
                        editText.setText("日期:" + year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
                    }
                }, year, monthOfYear, dayOfMonth);
                
                datePickerDialog.show();
            }
        });
        
        button2.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                /**
                 * 實例化一個TimePickerDialog的對象
                 * 第二個參數是一個TimePickerDialog.OnTimeSetListener匿名內部類,當用戶選擇好時間后點擊done會調用里面的onTimeset方法
                 */
                TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener()
                {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute)
                    {
                        editText2.setText("Time: " + hourOfDay + ":" + minute);
                    }
                }, hourOfDay, minute, true);
                
                timePickerDialog.show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

我們看到,我們如果要得到一個日期或者時間彈出框,只需要實例化一個 DatePickerDialog 和 TimePickerDialog 對象即可,我們來看看日期和時間彈出框的樣子是什么:

當點擊Done后,就會分別調用綁定到得監聽器,得到我們設置的時間

二、Toasts

Toasts對話框也是非常的簡單,其實在之前的一些隨筆里面我們已經大量的看到使用了Toast這種對話框來彈出一個信息給我們用戶,要注意的是,Toast框是不能夠與用戶進行交互的,當超過我們設定的時間后,Toast對話框會自動的消失,我們可以直接使用Toast的makeText這個靜態方法來實例化一個默認的Toast對象

public static Toast makeText (Context context, CharSequence text, int duration)

Parameters
context  The context to use. Usually your Application or Activity object.
text  The text to show. Can be formatted text.
duration  How long to display the message. Either LENGTH_SHORT or LENGTH_LONG

第一個參數指定了在哪個窗口下彈出這個Toast框,第二個參數指定了彈出框顯示的文本內容,第三個參數指定了彈出框顯示的時間。

默認的Toast彈出框是彈出一個黑色的框,彈出的位置位於屏幕的下方,我們還可以設置我們自定義的Toast彈出框,並可以通過 setGravity() 的方法來設置彈出框的位置。

下面我們也通過一個實例來看看Toast框的使用方法:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="32dp"
        android:text="彈出一個普通Toast框" />
    
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="29dp"
        android:text="彈出一個自定義的Toast框" />

</RelativeLayout>

同樣定義兩個Button,當點擊Button,彈出一個Toast框

     button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //    實例化一個Toast的對話框
                Toast toast = Toast.makeText(MainActivity.this, "Hello World", Toast.LENGTH_SHORT);
                /*
                 * setGravity方法來設定Toast框的彈出位置,第一個參數指定彈出的方位,第二個參數指定X軸的偏移量
                 * 第三個參數指定Y軸的偏移量
                 */
                toast.setGravity(Gravity.CENTER, 0, 0);
            }
        });

我們看到當我們設置了 setGravity()方法后,Toast的彈出框位置就會根據我們的設置發生變化

     button2.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //    通過LayoutInflater方法來加載我們自定義的xml布局文件
                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.toast, null);
                //    直接通過new的方式得到一個Toast對象
                Toast toast = new Toast(MainActivity.this);
                //    設置我們Toast框的彈出內容為我們自定義的Toast
                toast.setView(view);
                toast.show();
            }
        });

我們也可以通過自定義一個xml布局文件,然后通過Toast的setView方法來彈出一個我們自定義的Toast框。

三、ProgressDialog

最后我們來看一看ProgressDialog,這是一個進度條的彈出框,其也是AlertDialog的一個子類

java.lang.Object
   ↳     android.app.Dialog
         ↳     android.app.AlertDialog
               ↳     android.app.ProgressDialog

ProgressDialog可以顯示一個包含一個文本message或者是一個自定義的View的帶進度條的彈出框。注意:文本message和自定義的View只能存在一個

如果要創建一個ProgressDialog,我們可以直接通過new的方式來創建,因為進度條有兩種樣式,一種是水平的進度條,一種是圓圈進度條,所以我們還可以設置進度條彈出框的顯示樣式。下面我們通過一個實例來分別看看這兩種樣式的進度條彈出框:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="42dp"
        android:text="彈出一個圓形的進度條框" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="44dp"
        android:text="彈出一個水平的進度條框" />
    
</RelativeLayout>

圓形的進度條框:

     button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //    實例化一個ProgressDialog
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("提示信息");
                progressDialog.setMessage("正在下載中,請稍后......");
                //    設置ProgressDialog的顯示樣式,ProgressDialog.STYLE_SPINNER代表的是圓形進度條
                progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                progressDialog.show();
            }
        });

我們可以點擊屏幕其他部分,然后這個進度條彈出框就會消失,如果希望其不消失可以調用

progressDialog.setCancelable(false);    //    設置彈出框不能被取消

再來看看水平的進度條框:

     button2.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //    實例化一個ProgressDialog
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("提示信息");
                progressDialog.setMessage("正在下載中,請稍后......");
                //    設置最大進度,ProgressDialog的進度范圍是從1-10000
                progressDialog.setMax(100);
                //    設置主進度
                progressDialog.setProgress(50);
                //    設置第二進度
                progressDialog.setSecondaryProgress(70);
                //    設置ProgressDialog的顯示樣式,ProgressDialog.STYLE_HORIZONTAL代表的是水平進度條
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressDialog.show();
            }
        });

以上就是兩種進度條的使用方法

總結:本篇隨便主要講解了DatePickerDialog、TimePickerDialog、Toasts和ProgressDialog這四種彈出框的使用方法,在后續的隨筆當中,將會繼續記錄學習Android的點點滴滴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM