# AndroidStudy
**Repository Path**: frt2023/android-study
## Basic Information
- **Project Name**: AndroidStudy
- **Description**: 如题
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-05-24
- **Last Updated**: 2026-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
$$
HP \approx
\begin{cases}
tan90^o, sleepy
\\
0 / \infty, else
\end{cases}
$$
# 安卓学习
## > Study001
随便设计简陋页面+携带一些信息的页面跳转练习
## > Study002
#### 使用图片资源
task04, 把图片放入**app名/res/drawable**目录中,需要使用时可以通过**@drawable/图片名(无后缀名)**访问
#### 一小部分动态改变布局的实现
task0203
#### 线性布局-LinearLayout
从Study001开始就在用
#### 表格布局-TableLayout
task04
#### 相对布局-relativelayout
task05
#### Final
实现一个简单的登录页面,密码正确跳转到另一个简单页面,密码错误用Toast输出错误提示
## >Study003
#### 选择性的UI
**单选** RadioButton, 同RadioGroup的RadioButton里面最多选择一个
**多选** CheckBox
**转换开关** Switch(左右滑动), ToggleButton
#### 两种监听器
###### 点击监听
```java
View.OnClickListener
该接口必须定义函数 void onClick(View)
```
###### 开关改变监听
```java
CompoundButton.OnCheckedChangeListener
该接口必须定义函数 void onCheckedChanged(CompoundButton, boolean);
```
#### 在values/*中定义文本、颜色、字体、样式等
**文本** - strings.xml - eg:
```xml
想逃?闪电旋风劈!
```
**颜色** - colors.xml - eg:
```xml
#000000
```
**样式** - style.xml - eg:
下方代码为 Study003/app的style.xml 其中“导出选项”“清空选项”两个Button使用了sdxfp样式,Button中自己写的样式会覆盖style.xml中事先定义好的样式
```xml
```
**字体** - dimens.xml - eg:
```xml
24dp
```
## >Study004
#### UI部分
switch开关加图片
```xml
```
ImageButton 顾名思义
#### 设置(TextView)组件大小
```java
case R.id.switchb:
if(checked){
ViewGroup.LayoutParams params = img.getLayoutParams(); // 获取图片信息
params.width = (int) getResources().getDimension(R.dimen.bigSize);
params.height = (int) getResources().getDimension(R.dimen.bigSize);
img.setLayoutParams(params); //设置图片信息
}else{
ViewGroup.LayoutParams params = img.getLayoutParams();
params.width = (int) getResources().getDimension(R.dimen.middleSize);
params.height = (int) getResources().getDimension(R.dimen.middleSize);
img.setLayoutParams(params);
}
break;
```
#### 设置部分布局是否可见
```java
case R.id.sdate:
if(checked){
l1.setVisibility(View.VISIBLE);
l2.setVisibility(View.VISIBLE);
}else{
l1.setVisibility(View.GONE); // 不可见,没了
l2.setVisibility(View.INVISIBLE); // 不可见,占用原来的空间
}
break;
```
#### **Dialog** 对话框
###### 确定、取消、查看详情
```java
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("第一页,自动循环到最后一页")
.setTitle("提示")
.setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNegativeButton("给我回去",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
nowPage = 0;
img.setImageResource(images[nowPage]);
txt.setText(texts[nowPage]);
dialog.dismiss();
}
})
.setNeutralButton("查看详情",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...
dialog.dismiss();
}
})
.show();
```
###### icon、单选、复选
```java
.setIcon(R.drawable.gl)
//单选
.setSingleChoiceItems(texts, //选项是数组
-1, // -1代表没有选中项 0代表选中第一个
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which){
msta = texts[which].toString(); //witch 数组下标
}
})
```
完整复选例子
```java
AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);
builder2.setTitle("选择其他人的状态")
.setIcon(R.drawable.bzz)
//复选
.setMultiChoiceItems(texts, //选项是数组
ostaChoosed, //bool数组
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
ostaChoosed[which] = isChecked;
}
})
//确定选项
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String choosed = "";
for(int i=0; iStudy005
#### 页面交互 & Intent
###### 指定新启动的页面信息:
```java
Intent intent = new Intent();
intent.setClass(MainActivity.this, LinksActivity.class);
// or
Intent intent = new Intent(LinksActivity.this, WriteMsgActivity.class);
```
###### 在intent对象中附加数据
```java
Bundle bundle = new Bundle();
bundle.putInt("number_count", 12); //使用Bundle.putXXX() 把信息加入Bundle对象
bundle.putString("teacher_name","贺老师");
intent.putExtras(bundle); //调用putExtras方法将bundle附加到intent对象
//也可以不适用Bundle对象
intent.putExtra("student_no", student_no.getText().toString());
intent.putExtra("student_name", student_name.getText().toString());
intent.putExtra("gitee_addr", gitee_addr.getText().toString());
```
###### 启动新Activity
```java
startActivity(intent);
// or
startActivityForResult(intent, 0x77); // 返回后可以自定义针对requestCode(这里是0x77)做出不同的反应
//重写从启动的Activity返回后的方法,在信息框中显示相关数据
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) { //结果码resultCode为 Activity.RESULT_OK)
if (requestCode == 0x77) { //针对请求码为0x77的请示
Bundle bundle = data.getExtras();
msgsText.setText(msgsText.getText() + "省略" + bundle.getString("gitee_addr"));
}
}
}
```
###### 获取Intent对象以及附加的bundle对象
```java
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
//使用Bundle.getXXX()提取信息
promptText.setText("(学号位数:" + bundle.getInt("number_count", 0)
+ ";收集者:" + bundle.getString("teacher_name") + ")");
```
#### 隐式Intent
###### 创建隐式intent启动新的Activity
```java
//打开浏览器
Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.sohu.com"));
startActivity(i);
//启动地图
Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse("geo:25.04692437135412,121.5161783959678"));
startActivity(i);
//打电话
Intent i=new Intent(Intent.ACTION_DIAL, Uri.parse("tel:+1234567"));
startActivity(i);
//发送电子邮件
Intent i=new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:qst@163.com"));
startActivity(i);
```
#### 广播 & Broadcast
###### 新建广播接收器
继承BroadcastReceiver类并重写onReceive方法
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) { ... }}
```
###### 发送广播例子
```java
case R.id.myBroadcastBnt: //发送广播
//很多参考书中的示例未setComponent而导致收不到广播
intent.setComponent(new ComponentName(getPackageName(), "com.example.wldcmzy.study005.MyBroadcastReceiver"));
intent.putExtra("broadcast_content", "自己发广播自己玩。");
Log.d("提示", "发送广播");
sendBroadcast(intent);
intent.putExtra("broadcast_content", "乖乖宅校,抗疫先锋!");
Log.d("提示", "再发送广播");
sendBroadcast(intent);
break;
```
###### 接收系统广播
新建广播接收器,AndroidStudio在AndroidManifest.xml文件中自动注册广播接收器对象后,需要手动添加额外内容
```xml
```
在AndroidManifest.xml加入以下语句,定义应用程序使用短信广播权限
```xml
```
**有关短信的代码见相关文件SMSBroadcastReceiver.java MainActivity.java**
#### Handle
###### 利用Handle控制进度条
```xml
```
java代码见handle_demo.java
利用startActivity(intent);语句启动即可
###### 广告轮播器
可以使用ViewFlipper实现
```xml
```
java代码见advertise.java