开发第一个应用 GeoQuiz
由一个activity和一个布局(layout)组成
使用 Android studio 来开发。
创建项目:
选择sdk版本等
选择一个空的模板
创建activity的子类和layout
**
Building gradle project info 一直卡住解决
**
然后创建发现了问题。一直停在build。。。。卡了好久。
百度。原来是gradle版本不同。然后更新下载。但是。。。。有墙。那么就在csdn上下载一个。放在应有的目录即可。
各个版本的gradle:http://download.csdn.net/album/detail/2265
放的路径:C:\Users\Administrator.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv
还有个解决办法是找一个能运行的as项目文件。然后复制其/gradle/wrapper/gradle-wrapper.properties文件最后一行的url给需要创建的项目的相同地方即可。
注意创建的activity子类的名字,为 QuizActivity 而layout的名字是 activity倒过来的。即: activity-quiz
android的界面是用xml设置的。会默认创建出 activity-quiz.xml文件。
用来描述界面。
一些常用配置组件和常用属性
1、android:layout_width和android:layout_height
就是高宽。其对应的属性有两个
match_parent: 视图与其父视图的大小相同
wrap_content: 视图将其根据其展示的内容自动调整大小
还有android:padding=""24dp
这个的意思是说 告诉组件在决定大小的时候,除内容本身除外。还需增加额外指定量的空间。
2、android:orientation
是两个LinearLayout组件都具有的属性。决定的是子组件是水平还是垂直放置。
android:orientation="vertical"
3、android:text
TextView与Button组件都具有这个属性。该属性指定组件要显示的内容。
注意:android:text的属性值不是字符串值,而是对字符串资源的引用。
android:text="@string/question_text"
activity_quiz.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="24dp"
android:text="@string/question_text"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/true_button"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button"
/>
字符串资源是放置 res/values目录下的strings.xml。
有一个根 元素resources,其下有很多个string标签。引用的时候根据其属性name来获取。
**如何将xml元素转换成视图
是在继承activity的子类中重写Activity的onCreate方法。传入参数R.layout.activity_quiz
而且是在调用这个setContentView(R.layout.activity_quiz)的时候才开始实例化。
public class QuizActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
}
}
添加监听器
比如说给一个按钮添加个监听器。
首先先对xml页面进行实例化。然后或R来获取按钮即:
private Button mTrueButton ;
mTrueButton = (Button) findViewById(R.id.true_button)
这样就获取到页面中的truebutton了。是利用的id来获取资源。他的id就是true_button 在xml中定义
添加监听器:
mTrueButton.setOnClickListener( new View.OnclickListener(){
@Override
public void onClick(View v){
//在这写监听到按钮事件触发的效果
}
}
);
传入setOnClickListener(OnclickListener)方法的参数是一个监听器。该参数是一个实现了OnClickListener接口的对象。
传入setOnClickListener(OnclickListener)方法的监听器参数是一耳光匿名内部类实现的。
//获取button
mTrueButton = (Button) findViewById(R.id.true_button);
mFalseButton = (Button) findViewById(R.id.false_button);
//设置监听器
mTrueButton.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View v){
}
});
//
android应用是典型的事件驱动型类型。
添加按钮事件触发弹出提示消息
public void onClick(View v ){
Toast.makeText(QuizActivity.this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show();
}
传入的是QuizActivity.this而不是this。这个this指的是 监听器 View.OnClickListener。
public class QuizActivity extends AppCompatActivity {
private Button mTrueButton;
private Button mFalseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
//获取button
mTrueButton = (Button) findViewById(R.id.true_button);
mFalseButton = (Button) findViewById(R.id.false_button);
//设置监听器
mTrueButton.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(QuizActivity.this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show();
}
});
//
mFalseButton.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(QuizActivity.this,R.string.correct_toast,Toast.LENGTH_SHORT).show();
}
});
这里的R.string.correct_toast
也是在strings.xml中定义了的
运行
创建AVD
恩,然后创建一个,下载了好久后。运行。报错。发现我之前把strings.xml中的app_name删除了。再次添加。
成功运行!
java内存分为4块。一块是堆,用来存放new的对象,一个是栈,用来存放局部变量。然后是静态变量区,存放常量,静态变量,以及代码区,存放代码。
一定要注意版本问题
这个就解决了编程与平台版本不同
http://blog.csdn.net/leichelle/article/details/7988561