APP应用的功能是通过编写一个个Activity子类来实现的。
即:Activity+布局(layout)组成。layout由XML元素组成。XML元素即组件。
Activity:是Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互。
布局:定义了一系列用户界面对象以及它们显示在屏幕上的位置。布局保存在XML文件中。每个定义用来创建屏幕上的一个对象,如按钮或文本信息。
命名规范:
Activity Name:名称+Activity
activity文件中的变量命名:变量名前加m前缀。使用Alt+Enter组合键,可以自动导入对应类型的类包。
Layout Name:activity_名称
布局的命名规则是:将Activity名称的单词顺序颠倒过来并全部转换成小写字母,然后在单词间添加下划线。
组件(widget):是用户界面的基本组成模块。组件可以显示文字或图片,与用户交互,甚至布置屏幕上的其它组件。按钮、文本输入控件和选择框等都是组件。
Android SD内置了多种组件,通过配置各种组件可获得所需的用户界面及行为。每一个组件都是View类或其子类(如TextView或Button)的一个具体实例。
组件被声明在XML布局文件中,组件与XML元素一 一对应。元素的名称就是组件的类型。名元素均有一组XML属性。属性可以看作是如何配置组件的指令。
组件属性:
android:layout_width和android:layout_height属性
属性值:
match_parent:视图与其父视图大小相同。
wrap_content:视图将根据其展示的内容自动调整大小。
activity工作原理:
activity子类的实例创建后,会立即执行onCreate(Bundle)方法。同时activity需要获取并管理属于自己的用户界面,即调用setContentView(int layoutresID)方法。
该方法生成指定layout布局的视图并将显示在屏幕上。布局视图生成后,布局文件包含的组件也随之根据自身的属性定义完成实例化。之后即可使用findViewById(R.id.true_button);方法获取组件并操作。
资源和资源ID
布局是一种资源。资源是非代码形式的内容,比如图片、音频以及XML文件等。
项目的所有资源文件存放在app/res的子目录下。
Android为整个布局文件以及各个字符串生成资源ID。layout布局中的组件,只有当在Activity中需要调用的才需要设置资源ID,即属性:android:id="@+id/my_button"
注意:android:id属性值前面有一个+标志,表示是创建ID
layout布局文件中使用资源:
<Button
android:id="@+id/false_button" //创建ID
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button" //引用字符串资源
/>
activity中使用资源:
setContentView(R.layout.activity_quiz);//引用layout布局文件
mTrueButton=(Button)findViewById(R.id.true_button);//引用字符串资源
组件的实际应用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate(Bundle) called");
setContentView(R.layout.activity_quiz);//设置视图资源
mTrueButton=(Button)findViewById(R.id.true_button);//引用视图资源中组件
mFalseButton=(Button)findViewById(R.id.false_button);
mQuestionTextView=(TextView)findViewById(R.id.question_text_view);
mNextButton=(Button)findViewById(R.id.next_button);
mCheatButton=(Button)findViewById(R.id.cheat_button);
//为组件设置监听器
mCheatButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
boolean answerIsTrue=mQuestionBank[mCurrentIndex].isAnswerTrue();
Intent i=CheatActivity.newIntent(QuizActivity.this,answerIsTrue);
startActivityForResult(i,REQUEST_CODE_CHEAT);
}
});
提示消息: