1.按键监听器
在按键监听器注册时匿名内部类中使用toast时注意,此时this是View.OnClickListener,而不是activity
2.有时,出于种种原因,可能需要脱离Android Studio编译代码。
要使用Gradle,请切换到项目目录并执行以下命令:
$ ./gradlew tasks
如果是Windows系统,执行以下命令:
> gradlew.bat tasks
执行以上命令会显示一系列可用任务。你需要的是任务是installDebug,因此,再执行以下
命令:
$ ./gradlew installDebug
如果是Windows系统,执行以下命令。
> gradlew.bat installDebug
以上命令将把应用安装到当前连接的设备上,但不会运行它。要运行应用,需要在设备上手
动启动。
3.设置自动识别前缀
首先,配置Android Studio识别成员变量的m前缀。
打开Android Studio首选项对话框(Mac用户选择Android Studio菜单,Windows用户选择File →
Settings菜单)。分别展开Editor和Code Style选项,在Java选项下选择Code Generation选项页。
在Naming表单中,选择Fields行,添加m作为fields的前缀,然后添加s作为StaticFields的前缀 。
4.控件继承关系
View->TextView->Button
View->ImageView->ImageButton
5.onCreate()方法生命周期相关
通常, activity通过覆盖onCreate(...)方法来准备以下用户界面相关的工作:
实例化组件并将组件放置在屏幕上(调用setContentView(int)方法);
引用已实例化的组件;
为组件设置监听器以处理用户交互;
访问外部模型数据。
千万不要自己去调用onCreate(...)方法或任何其他Activity生命周期方法,记住这一点
很重要。我们只需在activity子类里覆盖这些方法,Android会适时去调用它们。
另外,在onCreate(...)方法里,必须首先调用超类的实现方法,然后再调用
其他方法,这一点很关键。而在其他几个方法中,是否首先调用超类方法就不那么重要了。
需要注意的是,停止的activity能够存在多久,谁也无法保证。系统需要回收内存时,它将首
先销毁那些停止的activity。
系统重启或长时间不使用activity时,暂存的activity记录通常也会被清除,此时的保存在activity中的bundle中的数据也会消失。
和单击主屏幕键不一样的是,单击后退键后,无论是否启用Don’t keep activities选项,系统
总是会销毁当前activity。单击后退键相当于通知系统“用户不再需要使用当前的activity”
6.设备旋转导致界面回到初始
在应用运行中,只要设备配置发生了改变,Android就会销毁当前activity,然后再
创建新的activity。
设备旋转时,系统会销毁当前QuizActivity实例,然后创建一个新的QuizActivity实例,重新调用oncreate调用新的布局文件。再
次旋转设备,查看该销毁与再创建的过程。
横屏activity的创建:
简单的方法是直接在数据目的activity中
Intent i = new Intent(QuizActivity.this, CheatActivity.class);
startActivity(i);
带参数的intent
传递数据需要在数据目的activity加入
public static Intent newIntent(Context packageContext, boolean answerIsTrue) {
Intent i = new Intent(packageContext, CheatActivity.class);
i.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
return i;
}
然后在数据源activity中调用这个方法,并且把数据answerIsTrue传递进去
Intent i = CheatActivity.newIntent(QuizActivity.this, answerIsTrue);
startActivityForResult(intent, REQUEST_CODE_CHEAT);
然后就可以在数据目的activity中获取
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);
处理返回值
发出返回值的activity首先设置数据isAnswerShown
private void setAnswerShownResult(boolean isAnswerShown) {
Intent data = new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
setResult(RESULT_OK, data);
}
其次设置静态解析方法
public static boolean wasAnswerShown(Intent result) {
return result.getBooleanExtra(EXTRA_ANSWER_SHOWN, false);
}
接收返回值的activity覆盖onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
if (requestCode == REQUEST_CODE_CHEAT) {
if (data == null) {
return;
}
mIsCheater = CheatActivity.wasAnswerShown(data);
}
}
8.创建UI fragment
创建UI fragment的步骤与创建activity的步骤相同,具体如下:
通过定义布局文件中的组件,组装界面;
创建fragment类并设置其视图为定义的布局;
通过代码的方式,组装在布局文件中实例化的组件
9.布局属性
android:padding和android:margin的区别
android:layout_marginLeft指该控件距离边父控件的边距,指定视图组件间的距离;
android:paddingLeft指该控件内部内容,如文本距离该控件的边距。指定视图外边框与其内容间的距离。
如:
当按钮分别设置以上两个属性时,得到的效果是不一样的。
android:paddingLeft="30px":
按钮上设置的内容(例如图片)离按钮左边边界30个像素。
android:layout_marginLeft="30px"
整个按钮离左边设置的内容30个像素
这二个属性是相对的,假设B是A的子控件,设置B的margin和设置A的padding能达到相同的效果。
不以layout_开头的属性作用于组件
以layout_开头的属性则作用于组件的父组件
10 .日期SimpleDateFormat
11.指定app登陆界面
12.RecyclerView ViewHolder 和 Adapter
RecyclerView 只创建刚好充满屏幕的12个视图,而不是100个视图。用户
滑动屏幕切换视图时,上一个视图会被回收利用。顾名思义, RecyclerView所做的就是回收再
利用,循环往复。 在oncreateview方法中会设置显示方式和绑定adapter和viewholder
adapter负责:
创建必要的ViewHolder;
绑定ViewHolder至模型层数据。
ViewHolder只做一件事:容纳View视图
13.Android开发常用到单例的一大原因是
它们比fragment或activity活得久。例如,在设备旋转
或是在fragment和activity间跳转的场景下,单例不会受到影响,而旧的fragment或activity已经不
复存在了
14.是否要保留fragment
第二遍总结:
1.Framelayout是最简单的layout,他是通过各个view的layout_gravity来确定位置。
2.startactivity并不是Activity的静态方法,他是通过交给操作系统的activityManager来启动别的应用,第一个参数指定要启动的activity在哪个包的content,并且通过getIntent() 获取startactivity传过来的intent。
3.显示intent主要用于同一应用中不同组件中。
4.调用Activity.finish()方法同样可以将CheatActivity从栈里弹出 。