Android的编程 – 帖子 7: 烤面包, 复选框, 单选按钮, 对话

在本文中,我将指导您与一些的Andr​​oid等基础学科的执行操作. 要做到这一点都兴奋不太单调, 我会引导你做出一个应用程序在OTVINA研究与基本内容招收如下:

[qads]

Android的注册形式

其原理是这短暂的. 当您填写完整, 我们得到的所有信息和检查. 如果出现错误的地方,然后宣布 (土司) 并再次开始. 如果一切正常,然后显示一个成功的消息对话框! 现在什么开始.

首先,我们的接口设计. 与接口是不是太复杂,几乎只有 1 晚 (纵向) 在这种情况下,我们应该选择的LinearLayout是合乎逻辑的,易于处理最.
嗯我还要在这一点上推荐给你最新的对象,所以我们将离线添加一些库. 你打开文件 build.gradle 和其他库 依赖

Android的集结gradle这个

    compile 'com.android.support:design:24.0.0'
    compile 'com.wdullaer:materialdatetimepicker:2.3.0'

第一个库的设计,使美丽的Andr​​oid的某些View库, 在此我们使用的是的EditText, 钮.
图书馆的东西 2 该库由方 3 提供了一个接口选择日期美丽

然后会有 1 黄金上面的通知,提醒您同步和更新项目. 你点击 立即同步

Android的同步项目

现在打开文件 activity_main.xml 并启动代码

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="8dp">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:src="@drawable/logo" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/editName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/name" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/editPhone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/phone"
                android:inputType="phone" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/editEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/editAddress"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/address" />
        </android.support.design.widget.TextInputLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal">

            <android.support.v7.widget.AppCompatButton
                android:id="@+id/btnBirthDay"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/birthday" />

            <RadioGroup
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal">

                <RadioButton
                    android:id="@+id/radMale"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:checked="true"
                    android:text="@string/male" />

                <RadioButton
                    android:id="@+id/radFeMale"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="@string/female" />
            </RadioGroup>
        </LinearLayout>

        <EditText
            android:id="@+id/editGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/group" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/course" />

        <CheckBox
            android:id="@+id/cbAndroid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/android" />

        <CheckBox
            android:id="@+id/cbWeb"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/web" />

        <CheckBox
            android:id="@+id/cbIC3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/ic3" />

        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btnOk"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/ok" />
    </LinearLayout>
</ScrollView>

Android的注册形式的预

在上面的代码,您注意以下几点:

  • 因为我们有很多在这个界面内容,所以有一些小的屏幕不会显示所有数据字段, 所以我们使用 滚动型, 它可以让我们拉起接口被封闭在它 (这里是在整个屏幕).
  • 主题 ImageView的 允许显示图像. 这里有照片徽标, 你可以 这里LOGO下载 和文件夹 /RES /绘.
  • android.support.design.widget.TextInputLayout 与合并的EditText将允许我们在点击的EditText导入数据创建一个很好的效果.
  • 在的EditText有某些属性 机器人:inputType下, 它有助于在键盘的风格弹出. 例如,在手机的类型点击时的EditText, 键盘包括数字小键盘弹出,当你调用相同的字符.
  • 单选按钮 是一个圆形的对象, 用来选择其中的一个选项, 所以我们需要在朝着成 RadioGroup中 否则,你可以选择在同一时间复选框许多选项.
  • AppCompatButton对象从按钮和更好的效果继承
  • 他的臣民的整个文本是从@字符串/ ABC新闻采取从文件中取出 /RES /价值/ string.xml. 我们设定这个目标的文本可以重复使用,当代码由java (也就是说,我们可以从XML或Java调用) 或多种语言的使用后.

文件/res/values​​/string.xml新和成秀:

<resources>
    <string name="app_name">TUT7CheckBoxRaidoToast</string>

    <string name="name">Họ và tên(*)</string>
    <string name="phone">Điện thoại(*)</string>
    <string name="email">Email(*)</string>
    <string name="address">Địa chỉ(*)</string>
    <string name="birthday">Ngày sinh</string>
    <string name="male">Nam</string>
    <string name="female">Nữ</string>
    <string name="group">Nhóm với ai (nếu có)</string>
    <string name="course">Khóa học</string>
    <string name="android">Android</string>
    <string name="web">Web</string>
    <string name="ic3">IC3</string>

    <string name="ok">Xong</string>
    <string name="cancel">Hủy</string>

    <string name="please_enter_name">Bạn chưa nhập tên</string>
    <string name="please_enter_phone">Bạn chưa nhập điện thoại</string>
    <string name="please_enter_email">Bạn chưa nhập email</string>
    <string name="please_enter_address">Bạn chưa nhập địa chỉ</string>
    <string name="please_enter_birthday">Bạn chưa chọn ngày sinh</string>
    <string name="please_enter_course">Bạn chưa chọn khóa học</string>

    <string name="success">Thành công</string>
    <string name="notify_thanks">Cảm ơn bạn đã đăng ký khóa học {0}.\nChúng tôi sẽ gửi đến bạn những thông tin mới nhất sắp tới</string>

</resources>

复制文件logo.png维罗/ RES /绘
Android的注册形式,附加标识

就是这样. 现在轮到唯一的Java代码.

package com.nguyenvanquan7826.tut7checkboxraidotoast;

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

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Context context;

    private EditText editName;
    private EditText editPhone;
    private EditText editEmail;
    private EditText editAddress;
    private EditText editGroup;

    private AppCompatButton btnBirthDay;

    private RadioButton radMale;
    private RadioButton radFemale;

    private CheckBox cbAndroid;
    private CheckBox cbWeb;
    private CheckBox cbIC3;

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

        context = this;

        connectView();
    }

    private void connectView() {
        editName = (EditText) findViewById(R.id.editName);
        editPhone = (EditText) findViewById(R.id.editPhone);
        editEmail = (EditText) findViewById(R.id.editEmail);
        editAddress = (EditText) findViewById(R.id.editAddress);
        editGroup = (EditText) findViewById(R.id.editGroup);

        btnBirthDay = (AppCompatButton) findViewById(R.id.btnBirthDay);
        btnBirthDay.setOnClickListener(this);
        findViewById(R.id.btnOk).setOnClickListener(this);

        radMale = (RadioButton) findViewById(R.id.radMale);
        radFemale = (RadioButton) findViewById(R.id.radFeMale);

        cbAndroid = (CheckBox) findViewById(R.id.cbAndroid);
        cbWeb = (CheckBox) findViewById(R.id.cbWeb);
        cbIC3 = (CheckBox) findViewById(R.id.cbIC3);
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        switch (id) {
            case R.id.btnBirthDay:
                selectBirthDay();
                break;
            case R.id.btnOk:
                ok();
                break;
        }
    }

    private void selectBirthDay() {
        int defaultYear = 1990;
        int defaultMonth = 0;
        int defaultDate = 1;
        // create and setting Datapicker
        DatePickerDialog dpd = DatePickerDialog.newInstance(
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {

                        Calendar calendar = Calendar.getInstance();
                        // set select date for calendar
                        calendar.set(year, monthOfYear, dayOfMonth);

                        // config string format to show date
                        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

                        // set date for button birthday
                        btnBirthDay.setText(sdf.format(calendar.getTime()));
                    }
                },
                defaultYear,
                defaultMonth,
                defaultDate
        );
        dpd.setOkText(context.getResources().getString(R.string.ok));
        dpd.setCancelText(context.getResources().getString(R.string.cancel));

        // show datepicker
        dpd.show(getFragmentManager(), "DatePickerDialog");
    }

    private void ok() {
        // get data
        String name = editName.getText().toString().trim();
        String phone = editPhone.getText().toString().trim();
        String email = editEmail.getText().toString().trim();
        String address = editAddress.getText().toString().trim();
        String group = editGroup.getText().toString().trim();

        String birthDay = btnBirthDay.getText().toString().trim();
        String sex = radMale.isChecked() ? getString(context, R.string.male) : getString(R.string.female);
        String course = "";
        if (cbAndroid.isChecked()) {
            if (course.length() > 0) {
                course += ", ";
            }
            course += getString(R.string.android);
        }
        if (cbWeb.isChecked()) {
            if (course.length() > 0) {
                course += ", ";
            }
            course += getString(R.string.web);
        }
        if (cbIC3.isChecked()) {
            if (course.length() > 0) {
                course += ", ";
            }
            course += getString(R.string.ic3);
        }


        // check data
        if (TextUtils.isEmpty(name)) {
            editName.requestFocus();
            Toast.makeText(context, getString(R.string.please_enter_name), Toast.LENGTH_SHORT).show();
            return;
        }
        if (TextUtils.isEmpty(phone)) {
            editPhone.requestFocus();
            Toast.makeText(context, getString(R.string.please_enter_phone), Toast.LENGTH_SHORT).show();
            return;
        }
        if (TextUtils.isEmpty(email)) {
            editEmail.requestFocus();
            Toast.makeText(context, getString(R.string.please_enter_email), Toast.LENGTH_SHORT).show();
            return;
        }
        if (TextUtils.isEmpty(address)) {
            editAddress.requestFocus();
            Toast.makeText(context, getString(R.string.please_enter_address), Toast.LENGTH_SHORT).show();
            return;
        }

        if (birthDay.equals(getString(R.string.birthday))) {
            Toast.makeText(context, getString(R.string.please_enter_birthday), Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(course)) {
            Toast.makeText(context, getString(R.string.please_enter_course), Toast.LENGTH_SHORT).show();
            return;
        }

        // if all is ok, we process data and show dialog to notify

        String notifyThanks = getString(context, R.string.notify_thanks);
        notifyThanks = completeString(notifyThanks, new String[]{course});

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(R.string.success)
                .setMessage(notifyThanks)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // do something
                    }
                })
                .create()
                .show();
    }

    public static String getString(Context context, int id) {
        return context.getResources().getString(id);
    }

    public static String completeString(String source, String[] item) {
        for (int i = 0; i < item.length; i++) {
            source = source.replace("{" + i + "}", item[i]);
        }
        return source;
    }
}

在上面的代码, 你看 1 上下文站, 请理解它是 1 情境变量. 所有的动作发生在一定的语境. 例, 显示 1 烤面包 (一个快速的通知) 他们还需要上下文 (背景). 在很多教程, 你可以看到他们写成 MainActivity.this, 他们都在这里,因为我被分配 上下文=此 已经.
但也有许多新的代码,但我已经注明,也很容易阅读, 读者会迅速遣散理解的代码!

结果:

Android的注册形式-OK