# 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