在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第八章-時間相關(guān)控件
第十八章-ViewPager+FragmentStatePagerAdapter實現(xiàn)仿微信Tab
第十五章-GridView實現(xiàn)動態(tài)添加和刪除子項
第九章-進(jìn)度條ProgressBar
第十二章-經(jīng)典的ListView
第十四章-GridView控件
第八章-時間相關(guān)控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開關(guān)按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動態(tài)添加、刪除及點擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴展(多選、全選、反選)
第四章-玩轉(zhuǎn)單選和多選按鈕
第十章-可以拖動的ProgressBar-SeekBar
第十九章-Android菜單之選項菜單

第八章-時間相關(guān)控件

  1. TimePicker和DatePicker

TimePicker是時間選擇控件,那么DatePicker就是日期選擇控件,在日期時間選擇上它們倆常常組合起來使用。 TimePicker常用方法有:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-1.png" alt="這里寫圖片描述" />

除了上述方法,還有一個TimePicker.OnTimeChangedListener ,實現(xiàn)該接口并覆寫相關(guān)方法可以完成時間變化時的監(jiān)聽。

DatePicker常用方法如下表:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-2.png" alt="這里寫圖片描述" />

通過一個實例來看一下如何使用TimePicker和DatePicker控件,并設(shè)置它們的變化監(jiān)聽,布局文件代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<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">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/textView" />
    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/datePicker" />
</RelativeLayout>

定義了一個DatePicker和一個TimePicker控件及一個TextView控件,TextView控件用于顯示時間和日期。 Activity代碼如下:

public class MainActivity extends Activity {
    private TextView textView;
    private DatePicker datePicker;
    private TimePicker timePicker;
    private int yearPre, month, day, hour, minutePre;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textView);
        datePicker = (DatePicker) findViewById(R.id.datePicker);
        timePicker = (TimePicker) findViewById(R.id.timePicker);
        yearPre = datePicker.getYear();
        month = datePicker.getMonth();
        day = datePicker.getDayOfMonth();
        hour = timePicker.getCurrentHour();
        minutePre = timePicker.getCurrentMinute();
        textView.setText("設(shè)置之前日期和時間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時" + minutePre + "分");
        //設(shè)置時間監(jiān)聽
        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                hour = hourOfDay;
                minutePre = minute;
                textView.setText("設(shè)置之前日期和時間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時" + minutePre + "分");
            }
        });
        //對于日期變化監(jiān)聽,不能直接設(shè)置監(jiān)聽,要通過init方法設(shè)置
        datePicker.init(1990, 05, 01, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                yearPre = year;
                month = monthOfYear;
                day = dayOfMonth;
                textView.setText("設(shè)置之后日期和時間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時" + minutePre + "分");
            }
        });
    }
}

通過上面表格中的方法獲取了當(dāng)前的年、月、日、時、分、秒等信息,在TextView中顯示,設(shè)置了日期變化和時間變化的監(jiān)聽,更新TextView中顯示的時間信息。

運行項目實例:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-3.png" alt="這里寫圖片描述" />

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-4.png" alt="這里寫圖片描述" />

2.Chronometer計時控件

public class 
Chronometer
extends TextView
java.lang.Object 
   ? android.view.View 
     ? android.widget.TextView 
       ? android.widget.Chronometer

計時控件繼承自TextView,其中API中介紹:Chronometr是一個簡單的定時器,你可以給它一個開始時間,并以此定時,或者如果你不給它一個開始時間,它將會使用你的時間通話開始。默認(rèn)情況下它會顯示在當(dāng)前定時器的值得形式"分:秒" 或"MM:SS",或者可以使用set(字符串)的定時器值到一個任意字符串。

其常用方法參考下表:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-5.png" alt="這里寫圖片描述" />

<?xml version="1.0" encoding="utf-8"?>
<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">
    <Chronometer
        android:id="@+id/chronometer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/chronometer">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="start"
            android:text="開始計時" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="stop"
            android:text="停止計時" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="reset"
            android:text="重置" />
    </LinearLayout>
</RelativeLayout>

Activity 代碼如下:

public class MainActivity extends Activity {
    private Chronometer chronometer;
    private long elapseTime = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chronometer = (Chronometer) findViewById(R.id.chronometer);
        chronometer.setFormat("計時:%s");
        chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                String time = chronometer.getText().toString().replaceAll("[^(\\d{2}:\\d{2})]", "");
                if ("00:30".equals(time)) {
                    Toast.makeText(MainActivity.this, "30秒計時到!", Toast.LENGTH_LONG).show();
                }
            }
        });

    }
    //開始按鈕監(jiān)聽
    public void start(View view) {
        //再次開始時要減去暫停時走過的時間
        chronometer.setBase(SystemClock.elapsedRealtime() - elapseTime);
        chronometer.start();
    }

    //暫停按鈕監(jiān)聽
    public void stop(View view) {
        chronometer.stop();
        elapseTime = SystemClock.elapsedRealtime() - chronometer.getBase();//記錄暫停時走過的時間
    }
    //重置按鈕監(jiān)聽
    public void reset(View view) {
        elapseTime = 0;
        chronometer.setBase(SystemClock.elapsedRealtime());
    }
}

本程序調(diào)用了start、stop和setBase方法實現(xiàn)了開始、暫停和重置的功能,還調(diào)用了setOnChronometerTickListener方法,實現(xiàn)了計時監(jiān)聽,計時到達(dá)30秒時,采用Toast進(jìn)行提示。

運行實例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-6.png" alt="這里寫圖片描述" />

前面五節(jié)講解了開發(fā)中經(jīng)常會遇到的控件,這里用一個例子集中再復(fù)習(xí)一下,注冊頁是應(yīng)用中經(jīng)常要編輯的頁面,就以注冊頁面的布局和相關(guān)邏輯處理,再次總結(jié)一下控件的用法。 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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">
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal"
        android:padding="10dp"
        android:text="用戶注冊"
        android:textColor="@color/colorAccent"
        android:textSize="20sp" />
    <LinearLayout
        android:id="@+id/ll_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="用戶名:"
            android:textColor="@color/colorAccent"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/et_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ll_username"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="24dp"
            android:text="密碼:"
            android:textColor="@color/colorAccent"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:password="true" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_sex"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ll_password"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="24dp"
            android:text="性別:"
            android:textColor="@color/colorAccent"
            android:textSize="16sp" />
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:entries="@array/sex"></Spinner>
    </LinearLayout>
    <TextView
        android:id="@+id/tv_born"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ll_sex"
        android:layout_marginRight="24dp"
        android:text="出生日期:"
        android:textColor="@color/colorAccent"
        android:textSize="16sp" />
    <DatePicker
        android:id="@+id/date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_born"></DatePicker>
    <Button
        android:id="@+id/btn_submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/date"
        android:text="注冊" />
    <TextView
        android:id="@+id/tv_information"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_submit"
        android:padding="10dp"
        android:text="注冊信息" />
</RelativeLayout>

這里要注意常用屬性的配置方法。 Activity代碼如下:

public class MainActivity extends Activity {
    private EditText etUserName, etPassword;
    private Spinner spinnerSex;
    private DatePicker datePickerBorn;
    private Button btnSubmit;
    private TextView tvInformation;
    private String sexStr;
    private String bornStr;

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

    //初始化View
    private void initViews() {
        bornStr = "1990年05月01日";
        etUserName = (EditText) findViewById(R.id.et_username);
        etPassword = (EditText) findViewById(R.id.et_password);
        spinnerSex = (Spinner) findViewById(R.id.spinner);
        spinnerSex.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {//設(shè)置選擇監(jiān)聽
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (position == 0) {
                    sexStr = "男";
                } else {
                    sexStr = "女";
                }
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                sexStr = "男";
            }
        });
        datePickerBorn = (DatePicker) findViewById(R.id.date);
        datePickerBorn.init(1990, 04, 01, new DatePicker.OnDateChangedListener() {//日期變化的監(jiān)聽
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                bornStr = year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日";
            }
        });
        btnSubmit = (Button) findViewById(R.id.btn_submit);
        tvInformation = (TextView) findViewById(R.id.tv_information);
        btnSubmit.setOnClickListener(new View.OnClickListener() {//單擊監(jiān)聽
            @Override
            public void onClick(View v) {
                tvInformation.setText("用戶名:" + etUserName.getText().toString() +
                        ";密碼:" + etPassword.getText().toString() + ";性別:" + sexStr +
                        ";出生日期:" + bornStr);
            }
        });
    }
}

這里共設(shè)置了setOnItemSelectedListener(Spinner控件子項選擇監(jiān)聽)、OnDateChangedListener(日期變換監(jiān)聽)、setOnClickListener(單擊監(jiān)聽)三種監(jiān)聽響應(yīng)用戶操作。 運行實例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/8-7.png" alt="這里寫圖片描述" />

DatePicker在布局中占用了太多的界面,導(dǎo)致整個界面看起來很不美觀,在實際開發(fā)中一般使用DatePickerDialog,采用對話框的形式,這樣可以有效減少界面占用,后面在對話框的章節(jié)會詳細(xì)介紹。