进入Android Studio官网下载安装包
Download Android Studio and SDK tools | Android Developers (google.cn)
2.安装安装过程中选择安装SDK和API
安装完成后,打开进入Tools中的SDK Manager,安装Android 8.0 API 26
3.创建运行环境安装AVD,Android Virtual Device
使用Android 8.0的API 26比较稳定
二、创建第一个Android项目 1.新建一个项目 2.直接在AVD上运行即可 三、UI界面的控制ui控制可以通过xml和java代码控制,也可组合控制,还有一种自定义View的方法
1.使用xml来控制页面在app下的src下的main下的res下的layout新建布局文件
点击layout文件夹按下Alt+Insert新建一个xml文件
新建一个xml文件如下
-
其中,layout_width和layout_height分别表示控件或布局的宽和高,设置属性match_parent为整个屏幕的最大值,wrap_content为布局或控件里内容所包含的最大值
-
text,style等属性可以设置引用属性,即使用@符号引用res目录下values目录下的文件名
styles.xml
strings.xml
My Application 测试字符串 -
gravity和layout_gravity属性分别是控件中内容的位置和控件本身位于布局中的位置,实际效果如下图
每一个xml文件都应该有一个对应的Activity文件,并且互相绑定
在java的一个包中,新建一个java文件
继承Activity类并且重写onCreate的void方法
设置绑定即setContentView
package com.thundersoft.test;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.thundersoft.myapplication.R;
public class TestAcitivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
}
}
也可以创建activity会自动创建对应的layout并且绑定
2.使用java代码来控制页面实现方法是,先创建布局管理器,接着创建具体的组件,最后将组件放入布局管理器中
package com.thundersoft.test;
import android.app.Activity;
import android.app.alertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.frameLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.thundersoft.myapplication.R;
public class Test2Activity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 创建一个帧布局管理器
frameLayout frameLayout = new frameLayout(Test2Activity.this);
// 在activity中显示这个activity布局
setContentView(frameLayout);
// 设置背景
// frameLayout.setBackground(this.getResources().getDrawable(R.drawable.ic_launcher_background));
// new一个TextView对象
TextView textView = new TextView(Test2Activity.this);
textView.setText(R.string.test_string);
// 将textview给放进去
frameLayout.addView(textView);
// 设置布局参数对象
frameLayout.LayoutParams layoutParams = new frameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
// 位置显示
layoutParams.gravity = Gravity.CENTER_HORIZonTAL | Gravity.CENTER_VERTICAL;
textView.setLayoutParams(layoutParams);
// new一个按钮并且放到布局中
Button button = new Button(Test2Activity.this);
// 为按钮设置一个点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new alertDialog.Builder(Test2Activity.this).setTitle("对话框标题")
.setMessage("对话框内容")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("确定区域","进入");
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("取消区域","退出");
}
})
.show();
}
});
frameLayout.addView(button);
}
}
如果要测试该页更改清单文件的如下代码
3.使用java代码和xml文件一起控制
新建一个GridlLayout网格布局
代码如下
其中
padding属性代表距离内部元素的间距
orientation表示内部元素是横向排列,纵向排列是android:orientation=“vertical”
rowCount和columnCount分别是该布局类的元素行数和列数
context即是xml和java代码页面的绑定
id是为了让java代码能够通过findviewbyid找到该布局对象
对应的java文件如下,Test3Activity:
package com.thundersoft.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.GridLayout;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.thundersoft.myapplication.R;
public class Test3Activity extends Activity {
private ImageView[] img = new ImageView[4];
private int[] imgIndex = new int[]{
R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test3);
GridLayout layout = findViewById(R.id.layout);
for (int i = 0; i < imgIndex.length; i++) {
img[i] = new ImageView(Test3Activity.this);
img[i].setImageResource(imgIndex[i]);
img[i].setPadding(6,6,8,8);
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(500, 500);
img[i].setLayoutParams(layoutParams);
layout.addView(img[i]);
}
}
}
其中
通过新建一个图像组件数组和一个图像访问地址数组,从xml中拿到布局元素,通过遍历将每一个图像设置大小和边距并且放进layout中
没有的组件要插入组件,有的,使用findView的方式找到组件并且自定义
4.开发自定义的Viewviewgroup是view的一个组合,它同时也可以和view同级
安卓开发提供了很多view组件,但是不够自定义,用户可以继承view开发自己的view
先建一个xml文件,使用frameLayout
再建立一个view.java继承view
package com.thundersoft.test;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
import com.thundersoft.myapplication.R;
public class Test4View extends View {
public float x;
public float y;
public Test4View(Context context) {
super(context);
x = 300;
y = 300;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 创建并且实例化paint对象
Paint paint = new Paint();
// 根据图片生成位图对象
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
R.mipmap.ic_launcher);
// 绘制图片
canvas.drawBitmap(bitmap,x,y,paint);
// 判断图片是否被回收
if(bitmap.isRecycled()) {
bitmap.recycle();
}
}
}
继承view后,需要写构造函数并且重写onDraw方法
写页面
package com.thundersoft.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.frameLayout;
import androidx.annotation.Nullable;
import com.thundersoft.myapplication.R;
public class Test4Activity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test4);
frameLayout frameLayout = findViewById(R.id.test4view);
// 实例化view
Test4View test4View = new Test4View(this);
test4View.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 设置x和y
test4View.x = event.getX();
test4View.y = event.getY();
// 重设组件位置
test4View.invalidate();
return true;
}
});
frameLayout.addView(test4View);
}
}
这样就将自己的view放到了自己的viewgroup也在这里也就是帧布局管理器中



