CreateNewProject
- 下载Android SDK
- 创建项目,选择
Android
,选择Empty Activity
,其他默认
Component
Components
EditText
,文本编辑框组件android:hint="QQ号/微信号"
—— 显示的默认文字
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:hint="QQ号/微信号" />
+ `android:drawableLeft="@mipmap/building"` ---- 在输入框的左边显示小图片
+ `android:drawablePadding="5dp"` ---- 设置图片和输入框的间距
+ `android:lines="5"` --- 设置一边编辑框的最大行数
TextView
—— 文本框组件android:maxWidth="210dp"
—— 设置最大宽度drawableLeft
—— 同上
ImageButton
图片按钮,没有Text
属性src
属性添加背景图片,background
属性更改背景颜色…
RadioButton
单选按钮RadioGroup
单选按钮组 ,,将一组RadioButton
括起来- 获取已点击按钮的值
RadioGroup rg = findViewById(R.id.radiogroup1);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
// i 为被选中的按钮的id号
RadioButton t = findViewById(i);
Toast.makeText(RelativeActivity.this,"You feel "+t.getText()+"!", Toast.LENGTH_SHORT).show();
}
});
CheckBox
复选框,多个的话,直接写多个就可以了,不需要括起来DatePicker
日期选择器TimePicker
时间选择器
tp.setIs24HourView(true); // 设置为24制
Chronometer
计时器ProgressBar
进度条设置
style
属性可更改进度条的样式?android:attr/progressBarStyleHorizontal
—— 水平细进度条?android:attr/progressBarStyleSmall
—— 旋转小进度条?android:attr/progressBarStyleLarge
—— 旋转大进度条@android:style/Widget.ProgressBar
—— 另一种样式 灰色圆形进度条@android:style/Widget.ProgressBar.Horizontal
——- 灰色水平@android:style/Widget.ProgressBar.Small
—— 圆形小灰色
SeekBar
拖动条android:thumb="@mipmap/hua"
—— 设置拖动点为一张图片
RatingBar
—— 星星评分条android:isIndicator="true"
—— 设置为不可改变android:numStars="6"
—— 设置星星的数量
// 获取已选的星星的数量
float rating = rb.getRating();
ImageView
图像视图- 默认XY等比例缩放,,设置
android:scaleType="fitXY"
XY分别缩放 android:adjustViewBounds="true"
—— 设置了这个之后,可以设置图片的最大宽度、最大高度android:maxWidth="60dp" android:maxHeight="60dp"
android:tint="#cccc"
—— 图片着色
- 默认XY等比例缩放,,设置
ImageSwitcher
图像切换器GridView
—— 网格组件- 使用适配器来控制显示内容
android:numColumns="3"
—— 设置列数android:verticalSpacing="5dp" android:horizontalSpacing="5dp"
—— 设置行列间隔
Spinner
下拉列表android:entries="@array/ctype"
—— 配置子元素,需要在values
下创建一个xml
文件,ctype
为名字
ListView
列表视图android:entries="@array/ctype"
—- 配置子元素,同上Spinner
和ListView
都可以利用适配器来配置子元素。
滚动条组件:
ScrollView
垂直滚动条,超出的内容可以由上下滚动来显示HorizontalScrollView
水平滚动条- 滚动条组件内部只能含有一个直接儿子组件,当有多个内容的时候需要用
Layout
组件括起来
ViewFlipper
—— 页面/图片滚动- 不过不知怎的不能通过他的id来获取它
Common_attribute
- id:
android:id="@+id/gridlayout"
宽度:
android:layout_width="match_parent"
match_parent
与父容器相同wrap_content
包裹自身的内容
- 高度:
android:layout_height="match_parent"
文本:
android:text="@string/app_name"
@string/xx
需要在res/values/string.xml
里面设置值
- 文本文字大小:
android:textSize="24sp"
背景:
android:background="@mipmap/psb"
@mipmap/xx
是res/mipmap
下面的图片资源- 背景颜色:
android:background="#ccc"
- 内边距:
android:paddingBottom="20dp" android:paddingStart="20dp" android:paddingLeft="20dp" android:paddingRight="20dp"
or
android:padding="20dp"
- 外边距:
android:layout_margin="@android:dimen/app_icon_size"
or
android:layout_marginLeft="100dp" android:layout_marginStart="100dp" android:layout_marginBottom="100dp" android:layout_marginEnd="100dp"
等等 参照定位位置:
app:layout_constraintLeft_toLeftOf="parent"
——参照是父组件app:layout_constraintTop_toBottomOf="@+id/hanata"
+android:layout_marginTop="12dp"
,,参照点的id为hanata
的组件的底部,且向上间隔12dp- 当外围使用的是
RelativeLayout
和ConstraintLayout
时,内部的子组件才有这个属性 android:layout_below="@+id/textView1"
—— 在这个组件的下面
- 布局管理器设置子组件的位置:
android:gravity="right|bottom"
(部分试用)
View
view
是界面的组成部分- UI组件的层次结构
ViewGroup ---View
|--View
|--ViewGroup --- View
|-- View
控制UI界面的方式
- 使用Xml文件
- 使用Java文件
- 混合使用Xml与Java文件来控制
- 开发自定义的View
子类TextView
ViewGroup
- 用于容纳其他组件
ViewGroup.LayoutParams
类
设置布局的高度和宽度等属性
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(60,40);
ViewGroup.MarginLayoutParams
类
设置外边距大小
ConstraintLayout
- 约束布局管理器, 网友讲解
FrameLayout
- 帧布局管理器,可用于显示层叠的内容,并且可以拖动
android:foreground="@mipmap/man"
—— 设置前景图像,始终位于最上层android:foregroundGravity="bottom"
—— 设置前景图像的上下左右位置
GridLayout
- 网格布局管理器
排列方向:
- 水平方向:
android:orientation="horizontal"
- 水平方向:
- 行数、列数:
android:rowCount="2"
android:columnCount="4"
子组件:
android:layout_row="0" android:layout_column="2"
—— 在第几列第几行android:layout_colunmSpan="2"
—— 跨几列android:layout_rowSpan="2"
—— 跨几行android:layout_gravity="center"
—— 在表格的位置
RelativeLayout
- 相对布局管理器
android:gravity="center"
—— 可以设置子组件为居中显示android:ignoreGravity="@android:id/button1"
—— 使id为这个的子组件不受gravity影响
android:layout_centerInParent="true"
—— 子组件在父组件的正中间
LinearLayout
线性布局管理器,将其中的组件按照水平或垂直的方式排列
- 水平方向:
android:orientation="horizontal"
- 垂直方向:
android:orientation="vertical"
- 水平方向:
- 设置子组件:
android:gravity="right|bottom"
子组件属性:
android:layout_weight
—— 子组件占父组件剩余空间的比例- 剩余空间是 除了已有组件所占的空间之外的地方
TableLayout
- 表格布局管理器
android:collapseColumns="1"
—— 使第几列被隐藏android:stretchColumns="0"
—— 允许第几列自动填充剩余的空间android:shrinkColumns="3"
—— 当内容超出屏幕范围时,使某一列自动缩小,以便让其他内容显示出来- 使用
TableRow
来控制表格的行
TabHost
- 标签页,选项卡,可以左右切换的控制器
- 设置固定id
android:id="@android:id/tabhost"
- 包含:id似乎都是固定这样的
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@android:id/tabs"></TabWidget>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/tabcontent">
</FrameLayout>
</LinearLayout>
- 需自定义两个供使用的xml文件,表示每个选项卡里面的内容
- 在Java文件里面配置选项卡
Fragment
- 不论是在xml文件里面添加还是使用Java文件添加Fragment,都出错,但是项目和老师的不一样,所以以后再改 ——
id !!
至少三个文件
- 使用
fragment
的主文件
- 使用
<fragment
android:id="@+id/frag"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:name="com.example.andriodapp.FragmentTest"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout="@layout/activity_hana"
android:layout_marginTop="200dp"/>
+ `fragment`的布局文件,一般布局
+ `java`文件
public class FragmentTest extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getContext(), R.layout.activity_hana, null);
return view;
}
}
intent
intent种类:
- 显式:
Intent intent = new Intent(Activity1.this, Activity2.class);
- 隐式,,不需要用到目标组件的名称
- 显式:
属性
- Component
- Action
- Data
- Category
- intent-filter,过滤器
Event
物理按键
物理按键事件
onKeyDown()
onKeyUp()
onKeyLongPress()
setOnLongClickListener
—— 长按事件的事件监听器setOnTouchListener
—— 触摸事件的事件监听器
各个物理按键所表示的常量
- 音量键 ——
KEYCODE_VOLUME_UP
..KEYCODE_VOLUME_DOWN
- 电源键 ——
KEYCODE_POWER
- 返回键 ——
KEYCODE_BACK
- 主屏键 ——
KEYCODE_HOME
- 菜单键 ——
KEYCODE_MENU
- 音量键 ——
Java_Event
GridLayout layout = findViewById(R.id.gridlayout);
—— 从界面中找出ID为这个的组件frameLayout.setBackgroundResource(R.mipmap.psb);
—— 设置背景图片TextView textView = new TextView(this);
—— 定义TextView组件frameLayout.addView(textView);
—— 加入组件到Layout中使用 Log 类来输出日志信息
- Log.i() - 普通信息
- Log.d() - 调试日志
- Log.v() - 冗余日志
- Log.e() - 错误日志
- Log.w() - 警告日志
static String TAG = "MainActivity";
Log.e(TAG, "错误信息");
Log.i(TAG, "普通信息");
Log.d(TAG, "调试信息");
Log.v(TAG, "荣誉信息");
text.setText(getResources().getString(R.string.name))
—— 在Java文件里面为Text指定strings.xml
的资源text2.setTextColor(ContextCompat.getColor(MainActivity.this,R.color.colorAccent))
—— 在Java文件里面更改text的文字颜色text.setTextSize(getResources().getDimension(R.dimen.text))
—— 在Java文件里面更改text的文字尺寸String [] arr = getResources().getStringArray(R.array.listitem)
—— 获取字符串资源- 在
drawable
文件夹里新建一个drawable文件,名为edittext_focused
,指定元素得到焦点、失去焦点的样式
<item android:state_focused="true" android:color="#111"/>
<item android:state_focused="false" android:color="#aaa"/>
// TextView引用
android:textColor="@drawable/edittext_focused"
- 在一个继承自
View
的类中, 绘制一个矩形
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 定义画笔
Paint paint = new Paint();
paint.setColor(0xaaff6622); // 设置画笔的颜色
paint.setStyle(Paint.Style.FILL); // 填充样式
// 绘制矩形
canvas.drawRect(10,10,280,150,paint);
}
new DrawView(this); //定义这个矩形 添加在页面中
绘制动画
- 逐帧动画,使用一串连续的图片,播放 产生动画效果。。在
drawable
下新建一个xml
文件,例如取名为fariy.xml
- 逐帧动画,使用一串连续的图片,播放 产生动画效果。。在
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/run1" android:duration="60"/>
<item android:drawable="@drawable/run2" android:duration="60"/>
<item android:drawable="@drawable/run3" android:duration="60"/>
<item android:drawable="@drawable/run4" android:duration="60"/>
</animation-list>
// 使用
android:background="@drawable/fariy"
// 播放 暂停
Button btn = findViewById(R.id.btn);
final AnimationDrawable anim = (AnimationDrawable)btn.getBackground();
anim.start();
anim.stop();
+ 补间动画, 设置起始和终止的值,由系统自动完成中间值的计算和显示
* 透明度的变化
* 旋转动画
* 位置的变化
* ...
音频播放
MediaPlayer
加载音频文件的方法
create()
setDataSoucre()
MediaPlayer mediaPlayer = MediaPlayer.create(this,R.raw.safeandsound);
mediaPlayer.play(); // 播放
.pause(); // 暂停
try { // 停止
mediaPlayer.stop();
mediaPlayer.prepare();
mediaPlayer.seekTo(0);
} catch(IOException e) {
e.printStackTrace();
}
// 销毁
protected void onDestroy() {
super.onDestroy();
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release(); // 释放资源
}
- 播放短小的音频
SoundPool
播放视频
VideoView
orMediaPlayer
+SerfaceView
- 都在SD卡上面的视频…
进程与线程
- 子线程不能更改主线程的组件
- 线程 - Looper - MessageQueue
- handler 通过 message 向 MessageQueue 发送消息
final int FLAG_MSG = 0x001;
private Message message; // 声明消息对象
// 定义
Message message = Message.obtain();
message.what = FLAG_MSG; // 设置消息说包含的内容 为自定义的一个int型值
handler.sendMessage(message); // 发送消息
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == FLAG_MSG){
/*** 处理事务 ***/
message = handler.obtainMessage(FLAG_MSG); // 获取message
handler.sendMessageDelayed(message, 3000); // 延迟3秒发送消息
}
}
};
- xx
final Handler handler = new Handler(){
@Override
public void handleMessage( Message msg) {
super.handleMessage(msg);
// 判断接收的消息是否是自己定义的那个
if(msg.what == 0x001){
/** 处理事务 **/
}
}
};
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(0x001); // 发送空消息
}
});
thread.start(); // 开启线程
Service
按照启动方式 分类:
- Started Service
- Bound Service
- 搞不懂…
location
有3中locationProvider
- passive
- gps
- network
other
- 在一个布局文件中,最多只能有一个根布局管理器,如果有多个 需要使用一个根布局管理器将他们括起来。
- 根布局管理器必须包含xmlns属性
- 自定义圆角矩形,在
drawable
文件夹下面新建一个xml
文件,比如这个shapeRadius.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#1ffa03"/>
<corners android:radius="30dp"/>
<padding android:bottom="10dp"
android:left="15dp"
android:right="15dp"
android:top="10dp"/>
</shape>
使用该形状,添加在按钮的属性里面
android:background="@drawable/shapeRadius"
在
values/styles
里面定义主题样式、样式- 在
AndroidManifest
里面设置主题样式,可以是全局的,也可以是单个Activity - 在java文件里面,
onCreate()
方法里,用setTheme(R.style.myTheme)
来设置样式 style="@style/title"
—— 组件使用样式- 样式可以继承,使用
parent
指定
- 在
<style name="title" parent="继承哪个样式">
<item name="android:textSize">30sp</item>
<item name="android:textColor">#06f</item>
</style>
- 选项菜单 —— 在
res
下创建menu
文件夹,新建Menu Resources file
,添加元素
<item android:id="fankui" android:title="反馈"></item>
- 在Java文件里面显示/隐藏Action Bar
final ActionBar ab = getSupportActionBar();
ab.show();
ab.hide();
弹出对话框
- 简单的确定/取消对话框
AlertDialog alertDialog = new AlertDialog.Builder(RelativeActivity.this).create();
alertDialog.setIcon(R.mipmap.building);
alertDialog.setTitle("GAME:");
alertDialog.setMessage("it's time to have a game");
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(RelativeActivity.this, "ok.", Toast.LENGTH_SHORT).show();
}
});
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(RelativeActivity.this, "ok!!!", Toast.LENGTH_SHORT).show();
}
});
alertDialog.show();
+ 有简单列表的对话框
final String[] items = new String[] {
"have an apple a day, keep doctor away.", "have a nice day",
"^O^","O.O"
};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
alertDialog.setIcon(R.mipmap.building);
alertDialog.setTitle("pick one");
alertDialog.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(RelativeActivity.this, "OK!!You picked "+items[i], Toast.LENGTH_SHORT).show();
}
});
alertDialog.create().show();
+ 单项选择的对话框
final String[] items = new String[] {
"have an apple a day, keep doctor away.", "have a nice day",
"^0^","O.O"
};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
alertDialog.setIcon(R.mipmap.building);
alertDialog.setTitle("pick one");
alertDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(RelativeActivity.this, "you picked "+items[i], Toast.LENGTH_SHORT).show();
}
});
alertDialog.setNegativeButton("cancel", null);
alertDialog.setPositiveButton("OK", null);
alertDialog.create().show();
+ 多项选择对话框
// 表示每个元素被选择的状态
final boolean [] checked = new boolean[] {true, false, false, true};
final String[] items = new String[] {
"have an apple a day, keep doctor away.", "have a nice day",
"^0^","O.O"
};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(RelativeActivity.this);
alertDialog.setIcon(R.mipmap.building);
alertDialog.setTitle("pick one");
alertDialog.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
checked[i] = b; //改变被操作列表项的状态
}
});
alertDialog.setNegativeButton("cancel", null);
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String result = "";
for(int j = 0; j < checked.length;j++){
if(checked[j]){
result+= items[j]+"/";
}
}
if(!"".equals(result)){
Toast.makeText(RelativeActivity.this, "you picked "+ result, Toast.LENGTH_SHORT).show();
}
}
});
alertDialog.create().show();
- 通知 ——
NotificationManager
&NotificationCompat.Builder
有误,后改 - 广播 ——
BroadcastReceiver
暂时补血
SetEvent
android:onClick="myClick"
—— 按钮的点击事件
- 注册点击事件,弹出提示框
public void myClick(View view) {
Toast.makeText(RelativeActivity.this, "wola", Toast.LENGTH_SHORT).show();
}
- 页面跳转
(当前Activity名, 下一个Activity名)
Intent intent = new Intent();
intent.setClass(LogoutActivity.this, DataActivity.class);
startActivity(intent);
- 为图片切换器设置图片切换效果
ImageSwitcher is = findViewById(R.id.iswi);
// 设置淡出动画效果
is.setOutAnimation(AnimationUtils.loadAnimation(HanaActivity.this, android.R.anim.fade_out));
is.setInAnimation(AnimationUtils.loadAnimation(HanaActivity.this, android.R.anim.fade_in));
is.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView iv = new ImageView(HanaActivity.this);
iv.setImageResource(R.mipmap.abc0);
return iv;
}
});
/* 设置 点击图片,实现向下一张图片切换 */
/* 下一张图片的名字是 abc1 */
is.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((ImageSwitcher)view).setImageResource(R.mipmap.abc1);
}
});
- 使用SimpleAdapter适配器为GridView设置图片
/** gridPicArr 是全局定义的int型数组,存储图片资源 **/
/** cell 是自定义的样式 **/
GridView gv = findViewById(R.id.grid);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(int i = 0; i< gridPicArr.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("img", gridPicArr[i]);
list.add(map);
}
SimpleAdapter sa = new SimpleAdapter(this, list, R.layout.cell, new String[]{"img"}, new int[]{R.id.img});
gv.setAdapter(sa);
- 使用适配器为下拉框设置元素,并设置 点击元素弹出提示框
String[] ctype = new String[] {"全部", "美术","数学", "语文", "英语"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, ctype);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner sp = findViewById(R.id.spin);
sp.setAdapter(adapter);
String str = sp.getSelectedItem().toString();
Toast.makeText(HanaActivity.this, str, Toast.LENGTH_SHORT).show();
- 为FrameLayout添加一个可以跟随手指移动的图片
/** SelfView 是一个自定义的Java文件,实现图片的绘画 **/
FrameLayout frameLayout = findViewById(R.id.mylayout);
final SelfView selfView = new SelfView(this);
// 跟随手指移动
selfView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
selfView.bitmapX = motionEvent.getX();
selfView.bitmapY = motionEvent.getY();
selfView.invalidate();
return true;
}
});
frameLayout.addView(selfView);
ScrollView scrollView = new ScrollView(SelfActivity.this);
ScrollView.LayoutParams lp = new ScrollView.LayoutParams(180, 100);
lp.setMargins(70, 220, 0, 0);
scrollView.setLayoutParams(lp);
使用Intent和Bundle跳转页面并向第二个页面传入数据
// 跳转页面
Button btn = findViewById(R.id.button_logout);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 获取输入的信息
String qq = ((EditText)findViewById(R.id.qq)).getText().toString();
String pwd = ((EditText)findViewById(R.id.pwd)).getText().toString();
String email = ((EditText)findViewById(R.id.email)).getText().toString();
if("".equals(qq) || "".equals(pwd) || "".equals(email) ){
Toast.makeText(EnterPage.this, "请填写完整的信息",Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent();
intent.setClass(EnterPage.this, LogoutActivity.class);
Bundle bundle = new Bundle();
bundle.putCharSequence("qq",qq);
bundle.putCharSequence("pwd",pwd);
bundle.putCharSequence("email",email);
intent.putExtras(bundle);
startActivity(intent);
}
});
```java / xml1 跳转 / Intent intent = new Intent(); intent.setClass(MainActivity.this, HanaActivity.class); startActivityForResult(intent, 0x11);
/ xml2 / // 为网格视图的元素设置点击事件监听器,获取图像 保存到数据包中 gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = getIntent(); Bundle bundle = new Bundle(); bundle.putInt(“imageId”, gridPicArr[i]); intent.putExtras(bundle); setResult(0x11, intent); finish(); } });
/ xml1 重写这个方法,获取结果 / @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 0x11 && resultCode == 0x11) { Bundle bundle = data.getExtras(); int imageId = bundle.getInt(“imageId”); gl.setBackgroundResource(imageId); } }
- copy
```java
private ImageView[] img = new ImageView[8];
private int imagPath = R.mipmap.ic_launcher;
GridLayout layout = findViewById(R.id.gridlayout);
for(int i = 0; i < 8; i++){
img[i] = new ImageView(MainActivity.this);
img[i].setImageResource(imagPath);
img[i].setPadding(2,2,2,2);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(60,40);
img[i].setLayoutParams(params);
layout.addView(img[i]);
}