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.