`
malong26
  • 浏览: 168710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ADT21抢鲜使用

阅读更多
伴着Android4.2的发布,楼主我也更新到了API17,adt换成21,抢鲜播报一下新变化。
首先是新建工程,系统提供了几个新模板


这个LoginActivity让人眼前一亮,并且Activity的代码都已经写好了,开发起来so easy!
这个MasterDetailFlow据IOS的同事说在苹果SDK早就有了,看来谷歌是迎面赶上啊。
再来看一张布局器


多个屏幕尺寸的预览图同时展示,更好的进行屏幕适配工作
下面是LoginActivity的代码
package com.example.adt21test;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Activity which displays a login screen to the user, offering registration as
 * well.
 */
public class LoginActivity extends Activity {
	/**
	 * A dummy authentication store containing known user names and passwords.
	 * TODO: remove after connecting to a real authentication system.
	 */
	private static final String[] DUMMY_CREDENTIALS = new String[] {
			"foo@example.com:hello", "bar@example.com:world" };

	/**
	 * The default email to populate the email field with.
	 */
	public static final String EXTRA_EMAIL = "com.example.android.authenticatordemo.extra.EMAIL";

	/**
	 * Keep track of the login task to ensure we can cancel it if requested.
	 */
	private UserLoginTask mAuthTask = null;

	// Values for email and password at the time of the login attempt.
	private String mEmail;
	private String mPassword;

	// UI references.
	private EditText mEmailView;
	private EditText mPasswordView;
	private View mLoginFormView;
	private View mLoginStatusView;
	private TextView mLoginStatusMessageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_login);

		// Set up the login form.
		mEmail = getIntent().getStringExtra(EXTRA_EMAIL);
		mEmailView = (EditText) findViewById(R.id.email);
		mEmailView.setText(mEmail);

		mPasswordView = (EditText) findViewById(R.id.password);
		mPasswordView
				.setOnEditorActionListener(new TextView.OnEditorActionListener() {
					@Override
					public boolean onEditorAction(TextView textView, int id,
							KeyEvent keyEvent) {
						if (id == R.id.login || id == EditorInfo.IME_NULL) {
							attemptLogin();
							return true;
						}
						return false;
					}
				});

		mLoginFormView = findViewById(R.id.login_form);
		mLoginStatusView = findViewById(R.id.login_status);
		mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);

		findViewById(R.id.sign_in_button).setOnClickListener(
				new View.OnClickListener() {
					@Override
					public void onClick(View view) {
						attemptLogin();
					}
				});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		getMenuInflater().inflate(R.menu.activity_login, menu);
		return true;
	}

	/**
	 * Attempts to sign in or register the account specified by the login form.
	 * If there are form errors (invalid email, missing fields, etc.), the
	 * errors are presented and no actual login attempt is made.
	 */
	public void attemptLogin() {
		if (mAuthTask != null) {
			return;
		}

		// Reset errors.
		mEmailView.setError(null);
		mPasswordView.setError(null);

		// Store values at the time of the login attempt.
		mEmail = mEmailView.getText().toString();
		mPassword = mPasswordView.getText().toString();

		boolean cancel = false;
		View focusView = null;

		// Check for a valid password.
		if (TextUtils.isEmpty(mPassword)) {
			mPasswordView.setError(getString(R.string.error_field_required));
			focusView = mPasswordView;
			cancel = true;
		} else if (mPassword.length() < 4) {
			mPasswordView.setError(getString(R.string.error_invalid_password));
			focusView = mPasswordView;
			cancel = true;
		}

		// Check for a valid email address.
		if (TextUtils.isEmpty(mEmail)) {
			mEmailView.setError(getString(R.string.error_field_required));
			focusView = mEmailView;
			cancel = true;
		} else if (!mEmail.contains("@")) {
			mEmailView.setError(getString(R.string.error_invalid_email));
			focusView = mEmailView;
			cancel = true;
		}

		if (cancel) {
			// There was an error; don't attempt login and focus the first
			// form field with an error.
			focusView.requestFocus();
		} else {
			// Show a progress spinner, and kick off a background task to
			// perform the user login attempt.
			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
			showProgress(true);
			mAuthTask = new UserLoginTask();
			mAuthTask.execute((Void) null);
		}
	}

	/**
	 * Shows the progress UI and hides the login form.
	 */
	@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
	private void showProgress(final boolean show) {
		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
		// for very easy animations. If available, use these APIs to fade-in
		// the progress spinner.
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
			int shortAnimTime = getResources().getInteger(
					android.R.integer.config_shortAnimTime);

			mLoginStatusView.setVisibility(View.VISIBLE);
			mLoginStatusView.animate().setDuration(shortAnimTime)
					.alpha(show ? 1 : 0)
					.setListener(new AnimatorListenerAdapter() {
						@Override
						public void onAnimationEnd(Animator animation) {
							mLoginStatusView.setVisibility(show ? View.VISIBLE
									: View.GONE);
						}
					});

			mLoginFormView.setVisibility(View.VISIBLE);
			mLoginFormView.animate().setDuration(shortAnimTime)
					.alpha(show ? 0 : 1)
					.setListener(new AnimatorListenerAdapter() {
						@Override
						public void onAnimationEnd(Animator animation) {
							mLoginFormView.setVisibility(show ? View.GONE
									: View.VISIBLE);
						}
					});
		} else {
			// The ViewPropertyAnimator APIs are not available, so simply show
			// and hide the relevant UI components.
			mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
			mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
		}
	}

	/**
	 * Represents an asynchronous login/registration task used to authenticate
	 * the user.
	 */
	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
		@Override
		protected Boolean doInBackground(Void... params) {
			// TODO: attempt authentication against a network service.

			try {
				// Simulate network access.
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				return false;
			}

			for (String credential : DUMMY_CREDENTIALS) {
				String[] pieces = credential.split(":");
				if (pieces[0].equals(mEmail)) {
					// Account exists, return true if the password matches.
					return pieces[1].equals(mPassword);
				}
			}

			// TODO: register the new account here.
			return true;
		}

		@Override
		protected void onPostExecute(final Boolean success) {
			mAuthTask = null;
			showProgress(false);

			if (success) {
				finish();
			} else {
				mPasswordView
						.setError(getString(R.string.error_incorrect_password));
				mPasswordView.requestFocus();
			}
		}

		@Override
		protected void onCancelled() {
			mAuthTask = null;
			showProgress(false);
		}
	}
}



稍微改一改就能用,Android程序员的春天越来越近了
  • 大小: 55.7 KB
  • 大小: 35 KB
0
0
分享到:
评论

相关推荐

    ADT20、ADT21UI设计器

    ADT20和ADT21是ADT的两个重要版本,分别代表了在Android开发工具链中的不同阶段。 在ADT20阶段,这个版本的更新可能包括以下关键特性: 1. **性能优化**:ADT20可能对编译速度和内存使用进行了优化,提高了开发者...

    aandroid的ADT21

    `使用说明.txt`可能提供了安装和使用的详细步骤,而`安装必读.url`链接可能是指向安装指南的网页,确保用户正确安装和配置ADT。 7. **额外组件** `plugins`目录通常包含了ADT的各个插件组件,这些组件负责扩展...

    Android ADT(ADT-23.0.6.zip)离线包

    这个离线包ADT-23.0.6.zip包含了开发者在没有网络连接时,仍然可以安装和使用的全套工具。下面将详细介绍ADT以及其包含的重要组件和功能。 **ADT的主要组成部分:** 1. **Eclipse IDE**: ADT基于Eclipse平台,提供...

    ADT 0.9.7,ADT8.0.1,ADT10.0.0,ADT12.0.0,ADT15.0.0(不需要下载分数)

    ADT 0.9.7,ADT8.0.1,ADT10.0.0,ADT12.0.0,ADT15.0.0(不需要下载分数) 搞了2年android了,附件可以用rar打开。

    SPI_MASTER.zip_ADT7310 使用_adt7310_adt7310 pudn

    具体实现会依赖于你所使用的微控制器和编程语言,但基本流程是相似的。 在ADT7310的温度读取过程中,首先需要发送一个读取命令,例如读取温度寄存器的值。然后,ADT7310会返回当前温度的数字表示,这个值可以是二...

    android ADT-21

    然而,对于仍在使用Eclipse的开发者,ADT-21提供了继续开发和维护旧项目的可能性。 总之,Android ADT-21是Android开发过程中的一个重要里程碑,它提升了开发者的生产力,提供了更完善的开发工具和对新API的支持。...

    mac 10.12.6 adt bundle损耗,使用原生eclipse安装adt下载

    在苹果Mac OS 10.12.6(Sierra)系统中,用户可能会遇到adt bundle的兼容性问题,导致其性能损耗或者无法正常使用。adt bundle是Android开发者工具集,包含Eclipse IDE以及用于Android开发的插件。由于adt bundle是预...

    ADT -21.1.0

    8. **插件支持**:标签“adt-21”可能指的是ADT的特定版本号,其中包含了对Eclipse插件系统的支持,允许安装其他扩展来增强IDE功能。 9. **更新与兼容性**:“ADT - 21.1.0”这个版本可能带来了性能优化、新特性或...

    ADT-0.9.7和ADT-10.0.1

    3. `web`:这是一个目录,可能包含了ADT的在线帮助系统的静态网页资源,开发者可以通过这些页面学习如何使用ADT进行开发。 4. `features`:此目录可能包含ADT的各种特性描述或插件信息,这些特性可能对应于ADT的...

    ADT_C语言ADT_

    抽象数据类型(Abstract Data Type,ADT)是计算机科学中的一种概念,它为数据结构和在这些结构上操作的方法提供了一种形式...在学习和使用C语言ADT的过程中,不仅可以提升编程技能,还能增强对计算机科学基础的理解。

    ADT 16、20、21

    ADT,全称为Android Developer Tools,是Google推出的一款集成开发环境,专为Android应用程序开发者设计。...同时,由于ADT已不再更新,对于新的Android版本和特性,推荐使用最新版本的Android Studio进行开发。

    EclipseADT-24.2.0-支持jdk8.zip

    1.Google已停止对ADT的支持,尤其是JDK8推出后,ADT已经不能使用,报unsupported class file version 52.0等问题 2.网上的adt24.0.2版本对logcat日志有问题 3.里面已经包含...

    Eclipse安卓ADT工具

    **Eclipse Android Development Tools (ADT) 插件详解** Eclipse Android Development Tools(ADT)是Android开发者必备...无论你是新手还是经验丰富的开发者,掌握ADT的使用将对你的Android开发工作带来极大的便利。

    adt 21.0 ,adt21.01,adt 22.0,adt 22.62

    在使用这个压缩包中的adt版本时,根据您的项目需求和SDK版本选择合适的ADT安装,将有助于确保开发过程的顺利进行。同时,保持ADT与Android SDK的同步更新,是保持应用竞争力和适应不断变化的Android生态系统的关键。

    adt下载,adt下载

    尽管如此,对于那些仍然使用Eclipse的开发者,ADT仍然是不可或缺的工具。 要下载ADT,你需要访问Google的Android开发者网站。遗憾的是,由于标题和描述只包含“adt下载adt下载”,没有提供具体链接,这里我无法提供...

    ADT-24.0.2下载兼容jdk1.8和jdk1.7

    3. **创建项目**:使用ADT创建新的Android项目,选择合适的API级别和设备配置。ADT会帮助你生成项目结构并提供必要的模板代码。 4. **编码与调试**:在Eclipse集成开发环境中,你可以编写、编译和运行Android应用。...

    ADT下载地址(含各版本),最新ADT-23.0.2

    通过使用ADT,开发者能够高效地进行应用程序的开发和测试工作。ADT不仅支持代码高亮显示、自动补全等功能,还集成了Android SDK管理器,方便开发者更新或安装SDK。此外,ADT还提供了丰富的调试工具,包括LogCat视图...

    ADT-24.0.2下载地址和使用方法,兼容jdk1.8和jdk1.7

    ADT-24.0.2下载地址和使用方法,可以使用jdk1.8和jdk1.7,解决Elipse 报如下错误的都可以:Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.

    adt7320使用手册

    ### ADT7320高精度数字温度传感器详解 #### 概述 ADT7320是一款由Analog Devices公司推出的高精度数字温度传感器,采用4mm x 4mm LFCSP(Lead Frame Chip Scale Package)封装,适用于广泛的工业、仪器仪表和医疗...

    ADT变频器资料

    ADT变频器是深圳市澳地特电气...整体来说,ADT变频器是一款适用于多种工业应用的高效变频设备,用户在使用之前应当熟悉操作手册提供的所有信息,确保安全、正确地安装和使用变频器,以避免人身伤害和设备损坏的风险。

Global site tag (gtag.js) - Google Analytics