Androidのプログラミング – 投稿 7: トースト, チェックボックス, ラジオボタン, ダイアログ
この記事では、Androidの他の基本的な被験者の数で操作を実行するためにご案内します. このすべての興奮と、あまりにも単調ではないを行うには, 次のように私は、基本的な内容でOTVINA研究に入学するためのアプリケーションを作るためにご案内します:
[qads]
原理はこの短いです. ときあなたは、フルフィル, 我々は、すべての情報と検査を取得します. エラーがどこかで、その後発表された場合 (トーストによります) そして再び開始. すべてがOKであれば、成功のメッセージダイアログを表示! 何が今始まります.
まず、インターフェイスを設計します. インターフェースはあまりにも複雑で、ほぼ唯一ではないと 1 夜 (縦に) このような状況で、我々はのLinearLayoutは論理的で最も扱いやすい選択してください.
ああ、私はまた、この時点であなたに最新のオブジェクトを、これをお勧めしますので、私たちはいくつかのライブラリをオフラインで追加します. あなたはファイルを開きます build.gradle そして、追加のライブラリ 依存関係
compile 'com.android.support:design:24.0.0' compile 'com.wdullaer:materialdatetimepicker:2.3.0'
最初のライブラリは、美しいアンドロイドにいくつかのビューを作成するように設計されたライブラリです, これで我々は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>
以下の点にご注意に上記のコードで:
- 私たちはこのインタフェースのコンテンツがたくさんあるので、いくつかの小さな画面では、すべてのデータフィールドが表示されませんでので、, 私たちは使用します ScrollView, それはそれで囲まれている私たちは、インターフェイスにプルアップすることができます (ここで、画面全体があります).
- オブジェクト ImageViewの 画像を表示することができ. ここでは写真のロゴです, 次のことができます ここにロゴをダウンロード そして、フォルダの /解像度/描画可能.
- android.support.design.widget.TextInputLayout データをインポートするEditTextのをクリックすると、EditTextのと合わせ私たちは素敵なエフェクトを作成することができます.
- EditTextのではいくつかの属性があります アンドロイド:inputType, それはキーボードが風にポップアップ表示するのに役立ちます. 例えば、携帯電話の種類EditTextのをクリック, テンキーを含むキーボードがポップアップし、あなたが呼んで同じ文字.
- ラジオボタン 円形オブジェクトであります, オプションの1つを選択するために使用, 私たちはによってに向かってする必要があります RADIOGROUP そうでなければ、チェックボックスと同時に多くのオプションを選択することができます.
- AppCompatButtonオブジェクトがボタンと、より良い効果から継承されます
- 彼の主題のテキスト全体は、@文字列/ ABCニュースから取られているが、ファイルから取得されます /解像度/値/ string.xmlを指定. 我々は、この目的のテキストを再利用することができます設定するときに、Javaによってコード (すなわち、私たちは、XMLやJavaから呼び出すことができます) 以降、複数の言語で使用されます.
ファイル/res/values/string.xml NHU SAU:
<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 VAO /解像度/描画可能なファイルをコピーします。
それでおしまい. 今だけの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] G:\Bai7NVQappbuildintermediatesexploded-aarcom.wdullaermaterialdatetimepicker2.3.0AndroidManifest.xml
提案: ツールを使用します:overrideLibrary =”com.wdullaer.materialdatetimepicker” 使用を強制的に
お使いのバージョンでは、不合理な設定します. あなたは、新しいプロジェクトを作成し、minSDKを選択しています 14 NHE, アンドロイド用 4 そして、上記
または
無水大井minh`ミューオンはnao` aをLAM thi`日または月または年RAを築きます, 私はそれをすべての文字列VDを築くためにしたくありません 01/12/2000 カイミューオンレイ 01
機能では、データの日付を取得, 彼らは、それによって1が返されました, 年, DAYOFMONTH, HOUR_OF_DAY.
グラムのSAU洞btnBirthDay.setText O電子のđặtのL(sdf.format(calendar.getTime())); それは完全に間違っている月です 1 ユニット , 年と日が長く真であります. ショーは右ボタン、右DCにあった理由を理解していません
からのjavaヶ月で 0-11 NHE. 我々は標準的な形式を持っている右のため、それが必要となるように表示.
彼thaks
=この段落のコンテキスト自問してみてください, この場合、これはオブジェクトを表します
これは、現在のactiviyあるNHE.
エラー:(1, 0) GradleのDSLの方法が見つかりません: 'コンパイル()’
考えられる原因:プロジェクトのcheckAndRadio’ アンドロイドのGradleのバージョンを使用することができるプラグインは、メソッドが含まれていません (例えば. 「testCompile’ で追加されました 1.1.0).
バージョンへのアップグレードプラグイン 2.3.3 シンクプロジェクトプロジェクトのcheckAndRadio’ メソッドが含まれていないのGradleのバージョンを使用することができます.
オープンのGradleラッパーファイルビルドファイルはGradleのプラグインが欠落することができます.
Gradleのプラグインを適用します。
Vどのようなエラー
あなたのアンドロイドのスタジオバージョン確かにそうでなければbuild.gradeに報告すべきです. それは更新がそれを修正すると述べました.
ボタン[OK]をブロを宣言しないで彼の部分のJavaコード
言うまでもなくNHE.