Android的编程 – 帖子 7: 烤面包, 复选框, 单选按钮, 对话
在本文中,我将指导您与一些的Android等基础学科的执行操作. 要做到这一点都兴奋不太单调, 我会引导你做出一个应用程序在OTVINA研究与基本内容招收如下:
[qads]

其原理是这短暂的. 当您填写完整, 我们得到的所有信息和检查. 如果出现错误的地方,然后宣布 (土司) 并再次开始. 如果一切正常,然后显示一个成功的消息对话框! 现在什么开始.
首先,我们的接口设计. 与接口是不是太复杂,几乎只有 1 晚 (纵向) 在这种情况下,我们应该选择的LinearLayout是合乎逻辑的,易于处理最.
嗯我还要在这一点上推荐给你最新的对象,所以我们将离线添加一些库. 你打开文件 build.gradle 和其他库 依赖

compile 'com.android.support:design:24.0.0'
compile 'com.wdullaer:materialdatetimepicker:2.3.0'
第一个库的设计,使美丽的Android的某些View库, 在此我们使用的是的EditText, 钮.
图书馆的东西 2 该库由方 3 提供了一个接口选择日期美丽
然后会有 1 黄金上面的通知,提醒您同步和更新项目. 你点击 立即同步

现在打开文件 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>

在上面的代码,您注意以下几点:
- 因为我们有很多在这个界面内容,所以有一些小的屏幕不会显示所有数据字段, 所以我们使用 滚动型, 它可以让我们拉起接口被封闭在它 (这里是在整个屏幕).
- 主题 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 /绘

就是这样. 现在轮到唯一的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, 他们都在这里,因为我被分配 上下文=此 已经.
但也有许多新的代码,但我已经注明,也很容易阅读, 读者会迅速遣散理解的代码!
结果:




一个人住一天法律错误:执行失败的任务“:应用程序:processDebugManifest“.
> 清单合并失败 : 使用-SDK:的minSdkVersion 9 不能小于版本小 14 在库中声明 [com.wdullaer:materialdatetimepicker:2.3.0] 摹:\Bai7NVQ 程序编译中间体爆炸-AAR com.wdullaer materialdatetimepicker 2.3.0 AndroidManifest.xml中
建议: 使用的工具:overrideLibrary =”com.wdullaer.materialdatetimepicker” 强制使用
你的配置不合理版本. 您正在创建一个新的项目,并选择minSDK 14 NHE, 为Android 4 和上面
或通过
无水OI minh`介子打下白天或周一或年岭thi`揍的nao`一个, 我不想把钱全串VD 01/12/2000 驰介子外行 01
在功能检索数据日期, 他们由一人一票, 年, DAYOFMONTH, HOUROFDAY.
Ëđặt1。·摹秀东btnBirthDay.setText(sdf.format(calendar.getTime())); 这是一个月完全错误 1 单元 , 年,天都不再成立. 不明白为什么显示是正确的按钮,右键DC
在从Java个月 0-11 NHE. 显示了正确的,因为我们有一个标准的格式,以便它应该.
他thaks
问问自己这一段的上下文=, 在这种情况下,这表示该对象
这是当前activiy NHE.
错误:(1, 0) 摇篮DSL方法未找到: “编译()’
可能的原因:该项目的checkAndRadio’ 可使用版本的Android摇篮的插件不包含该方法 (e.g. “testCompile’ 在加入 1.1.0).
升级插件版本 2.3.3 和同步工程该项目的checkAndRadio’ 可以使用一个版本的摇篮不包含的方法.
打开包装摇篮文件构建文件可能丢失一个摇篮插件.
应用摇篮插件
什么错误V A
确认您的Android工作室其他版本应该是在build.grade报道. 它说的更新来修复它.
在没有宣布按钮OK兄弟在他的部分Java代码
不用NHE.