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

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

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

  1. TimePicker和DatePicker

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

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

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

DatePicker常用方法如下表:

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

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

<?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>

定義了一個(gè)DatePicker和一個(gè)TimePicker控件及一個(gè)TextView控件,TextView控件用于顯示時(shí)間和日期。 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è)置之前日期和時(shí)間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時(shí)" + minutePre + "分");
        //設(shè)置時(shí)間監(jiān)聽(tīng)
        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                hour = hourOfDay;
                minutePre = minute;
                textView.setText("設(shè)置之前日期和時(shí)間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時(shí)" + minutePre + "分");
            }
        });
        //對(duì)于日期變化監(jiān)聽(tīng),不能直接設(shè)置監(jiān)聽(tīng),要通過(guò)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è)置之后日期和時(shí)間是:" + yearPre + "年" + (month + 1) + "月" + day + "日" + hour + "時(shí)" + minutePre + "分");
            }
        });
    }
}

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

運(yùn)行項(xiàng)目實(shí)例:

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計(jì)時(shí)控件

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

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

其常用方法參考下表:

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="開(kāi)始計(jì)時(shí)" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="stop"
            android:text="停止計(jì)時(shí)" />
        <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("計(jì)時(shí):%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秒計(jì)時(shí)到!", Toast.LENGTH_LONG).show();
                }
            }
        });

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

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

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

運(yùn)行實(shí)例如下:

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

前面五節(jié)講解了開(kāi)發(fā)中經(jīng)常會(huì)遇到的控件,這里用一個(gè)例子集中再?gòu)?fù)習(xí)一下,注冊(cè)頁(yè)是應(yīng)用中經(jīng)常要編輯的頁(yè)面,就以注冊(cè)頁(yè)面的布局和相關(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="用戶注冊(cè)"
        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="注冊(cè)" />
    <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="注冊(cè)信息" />
</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)聽(tīng)
            @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)聽(tīng)
            @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)聽(tīng)
            @Override
            public void onClick(View v) {
                tvInformation.setText("用戶名:" + etUserName.getText().toString() +
                        ";密碼:" + etPassword.getText().toString() + ";性別:" + sexStr +
                        ";出生日期:" + bornStr);
            }
        });
    }
}

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

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

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