又是一年,慢慢开始往大前端趋势转,Android算算也工作这么久了,一直很想找个时间系统归纳一下自己android的知识体系,或查漏补缺,或精卫填海…一直没觉得自己技术多厉害,总是感觉如同一个尘埃,第一篇的产出来自北京的第一份工作,到现在,还是很感谢自己的选择了,虽然那一份是当时手里offer中工资最低的,工作时间996,因为源码,没有犹豫就选了。很庆幸在那个Android市场有回落趋势却也相对热乎的时候,就开始在意底层,即使,那个时候菜的一13~现在也有很多缺陷… 拔出来买了很久的【第一行代码】顺顺思路,一本一本来~初学者推荐看,0基础入门~写的挺好的~

Android项目格式:

1.src :所有java代码
2.gen:这个目录内容全部是自动生成的。这个文件永远不需要手动修改。主要有一个R.java文件,即对应资源id
3.assets: 用的不多,主要存放一些随程序打包的文件。webview加载本地网页功能,所有相关网页文件也放在这里
4.bin:主要包含一些在编译时自动产生的文件。打包成功的apk就在这个下面
5.libs:放第三方jar包。
6.res: 所有资源,文件/图片/布局等
7.AndroidManifest.xml: 整个android项目的配置文件。四大组件配置位置,权限,版本兼容
8.project.properties: 指定编译程序使用的sdk版本

隐藏标题栏

onCreate方法中,在setContentView前面调用:

requestWindowFeature(Window.FEATURE_NO_TITLE)

显示/隐示 Intent

//显示startActivity(this,new Intent(A.class));//隐示实例一<activity andrid:name=".A"><intent-filter>//action 和category同时匹配才能相应,DEFAULT为默认,只需对应action                <action android:name="com.example.acticity.ACTION_START"/>                <category android:name="android.intent.category.DEFAULT"/>                 <category android:name="com.example.acticity.ATEST"/>    </intent-filter></activity>startActivity(new Intent("com.example.acticity.ACTION_START");//添加category//对应:action 和category同时匹配Intent intent=new Intent("com.example.acticity.ACTION_START");intent.addCategory("com.example.acticity.ATEST");startActivity(intent);//隐2:Intent intent=new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse(" http://baidu.com "));startActivity(intent);Intent intent=new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse(" tel:100086"));startActivity(intent);

数据传递

//传递数据String data="hello world";Intent intent=new Intent(this,A.class);intent.putExtra("extra_data",data);startActivity(intent);//接收数据Intent intent=getIntent();String data=intent.getStringExtra("extra_data");

数据返回给上一个activity

//firstActivity.classIntent intent=new Intent(this,A.class);//这的100,请求码是一个唯一值就可以了startActivityForResult(intent,100);//requestCode 发送数据携带的请求码//resultCode 放回数据时传入的处理结果//data:intent携带的参数..onActivityResult(int requestCode, int resultCode, Intent data){//可以通过requestCode 和resultCode 来针对处理switch(requestCode){case 1:if(rsultCode==RESULT_OK){data.getStringExtra("data_result");}}}//A.classIntent intent=new Intent();intent.putExtra("data_return","hello world");/*** 第一个参数:用于向回传递的数据【一般是RESULT_OK或RESULT_CANCELED】* 第二个参数:把带有数据的intent传递回去*/setResult(RESULT_OK, intent);

用户点击back按钮数据无法返回,可以我们可以重写onBackPressed,其中添加返回逻辑

生命周期直接过

activity被回收怎么办?解决数据丢失

OnSaveInstanceState(Bundle outState) //保存数据
onCreate(Bundle saveInstanceState) //获取到保存到

//保存数据OnSaveInstanceState(Bundle outState) ..{String tempData="you data"ouState.putString("data_key",tempData);}//重写创建的时候获取数据onCreate(Bundle saveInstanceState) {if(saveInstanceState !=null){String tempData = saveInstanceState.getString("data_key");}}

activity启动模式

1.standard:普通的
2.singleTop:activity在栈顶就就复用实例,不在重新创建一个
3.singleTask: 检查整个栈是否有这个实例,有就直接复用,并弹出它上面的所有activity,没有直接创建
4.singleInstance:启动一个新的栈存放实例

快速退出程序[关闭所有activity]

创建一个管理类:

public class ActivityCollector{public static list<Activity>  activitys=new ArrayList<Activity>public static void addActivity(Activity activity){activitys.add(activity);}public static void removeActivity(Activity activity){activitys.remove(activity);}public static void finishAll( ){for(Activity  activity: activitys){if(!activity.isFinishing()){ activity.finish(); }}}}

创建一个BaseActivity, 创建的activity继承

public class BaseActivity extends Activity{...onCreate(..){ActivityCollector.addActivity(this);}...onDestory(...){ActivityCollector.removeActivity(this);}}

关闭所有activity

ActivityCollector.finishAll();

Android UI细节

图片

1.imageView.setImageResource(R.drawable.xx) 设置图片资源
2.图片使用background会将图片放大,默认是图片上下拉升进行适配
3.图片使用src不会让图片失真,如果图片不能够填充整个窗口,可以添加scaleType属性【android:scaleType=centerCrop :会讲图片进行等比例的拉升,将图片从中间位置进行放大进行适配】
4.splash页面全屏,电池信号bar都隐藏掉:

//设置style<style name="AppTheme.FullScreen">    <item name="windowNoTitle">true</item>    <item name="android:windowFullscreen">true</item></style>//使用 <activity        android:name=".ui.activity.SplashActivity"        android:theme="@style/AppTheme.Fullscreen">        <intent-filter>           <action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />        </intent-filter>  </activity>

使用Preference控件

这个业务逻辑开发中真没有用过,学kotlin的时候倒是用了一下实战项目

1.设置页面设置layout (activity_setting)2.写一个类继承PreferenceActivity/PreferenceFragment 这个列子继承后者  2.1创建 SettingFragment : PreferenceFragment  2.2 onCreateView()使用addPreferenceFromResoure(R.xml.setting) 2.3 创建xml文件<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android";><Preferenceandroid:key="clear_cache"android:title="清除缓存" /><SwitchPreferenceandroid:key="push"android:title="推送通知" /><SwitchPreferenceandroid:key="no_wifi"android:title="非wifi下加载tup" /><Preferenceandroid:key="about"android:title="关于" /></PreferenceScreen>3.回到setting_activity布局中完善布局<?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:orientation="horizontal"><include layout="@layout/toolbar" /><fragmentandroid:id="@+id/setting_fragment"class="dengxj.kotlin.demo.com.ui.fragment.SettingFragment"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>4.获取Preference里面存值//获取通知有没有选中val sp = PreferenceManager.getDefaultSharedPreferences(this)val push = sp.getBoolean("push", false)println("push=$push")

布局

Tablelayout: 允许我们使用表格方式来排列控件,很少用。

//这里的“1”,表示如果表格不能完全占满屏幕宽度,就将第二列拉伸。同理,如果是0,就是拉申第一列<TableLayout xml:......android:stretchColumns="1">

更多相关文章

  1. 深入理解Android工程的编译过程
  2. 做自己的Android(安卓)ROM,屏蔽对framework中的系统APK的签名检查
  3. Android调用系统相机、自定义相机、处理大图片
  4. Android(安卓)三大图片缓存原理、特性对比
  5. Android官方架构组件Paging:分页库的设计美学
  6. 让Android自带的Gallery实现多点缩放,拖动和边界回弹效果,效果流畅
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. python起点网月票榜字体反爬案例
  9. NPM 和webpack 的基础使用

随机推荐

  1. 4.13 在vSphere环境中创建不同类型的文件
  2. 各种IT职业的英文翻译
  3. 写了一个字符串的二维表: TSta
  4. UI 自动化测试在有赞的实践
  5. 覆盖、再覆盖
  6. rsync daemon模式实战
  7. AEnM:兴利除弊—实现高性能织物基柔性电化
  8. 记一次失败的Perl + Nginx + FastCGI 配
  9. 执行 Application.Terminate 后, OnDestr
  10. Perl Dancer 学习(一)