Android开发随笔(一)
一、安卓开发初体验
1.创建项目需注意:
1)在包名处(Package Name)输入com.bignerdranch.android.geoquiz ,包名遵循了“DNS反转”约定,
亦即将企业组织或公司的域名反转后,在尾部附加上应用名称。遵循此约定可以保证包名的唯一性,这样,
同一设备和Google Play商店的 各类应用就可以区分开来。
2)在Activity Name中取名为QuizActivity,系统会自动在Layout Name中生成activity_quiz.xml,建议
遵循这样一种好的命名习惯。
2.用户界面设计:
按钮、文本输入控件、选择框等都是组件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" //match_parent是填充单元尽可能多的空间
android:layout_height="match_parent" android:gravity="center" //gravity控制元素在控件里的显示位置 android:orientation="vertical" > <TextView
android:layout_width="wrap_content" //wrap_content是根据内容自动布局
android:layout_height="wrap_content"
android:padding="24dp" //padding指定的是元素边框与元素内容之间的距离
android:text="@string/question_text" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" > //orientation(定向)是控制布局顺序,垂直(vertical)还是水平(horizontal) <Button
android:id="@+id/true_button" //为Button控件生成id,为了在activity中获取它们
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/true_button" /> //调用String.xml中的true_button字符串 <Button
android:id="@+id/false_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button" /> </LinearLayout>
</LinearLayout>
3.组件的实际运用(创建QuizActivity.java)
package com.zhouhongming.geoquiz; import android...... //此类为Activity子类,里面为整个界面的逻辑控制代码 public class QuizActivity extends Activity { //第一步,为视图对象设置变量 private Button mTrueButton; private Button mFalseButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //第二步,通过activity_quiz.xml来获取activity的用户界面 setContentView(R.layout.activity_quiz); //第三四步都是在onCreate()方法中实现 //第三步,为视图变量寻找资源ID,使用findViewById(),注意要向下转型 mTrueButton = (Button)findViewById(R.id.true_button); //第四步,用视图变量设置监听器,所有监听器参数都作为匿名内部类来实现 mTrueButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(QuizActivity.this, R.string.incorrect_toast, Toast.LENGH_SHORT).show(); } }); mFalseButton = (Button)findViewById(R.id.false_button); mFalseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
//创建提示消息:Toast类的makeText方法,第一个参数为本Activity当前实例,
第二个参数为待显示字符串消息的资源ID,第三个参数为消息显示持续时间 Toast.makeText(QuizActivity.this, R.string.correct_toast, Toast.LENGH_SHORT).show(); } }); @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); Log.i(TAG, "onSaveInstanceState"); savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_quiz, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
4.String.xml(这个较为简单,就不再赘述了)
5.Android编译过程:
二、Android与MVC设计模式
1.创建新类(引入model):
创建TrueFalse类
package com.zhouhongming.geoquiz; //TrueFalse类是MVC中的model,用来封存一些数据 public class TrueFalse { //这儿是设置问题,因为是资源ID,所以用int类型 private int mQuestion; //这儿为判断正确与否的方法 private boolean mTrueQuestion; //这儿是为了创建数组而使用的TrueFalse类的构造方法 public TrueFalse(int question,boolean trueQuestion){ mQuestion = question; mTrueQuestion = trueQuestion; } public int getQuestion() { return mQuestion; } public boolean isTrueQuestion() { return mTrueQuestion; } }
2.MVC:
M代表model(模型对象):java文件,它不关心用户界面,唯一存在的目的就是储存和管理应用数据
V代表view(视图对象):一切能都在屏幕上显示出来的,就是视图对象,想xml布局文件等
C代表controller(控制对象):就是activity,Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互
3.MVC相互之间关系: