又是一年,慢慢开始往大前端趋势转,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(安卓)NDK Hello + JNI 与 NDK区别
  3. Android开发中使用矢量图
  4. Android分享文件到微信和QQ功能的实现(兼容android 7.0以上的共享
  5. Android几种常见 自定义Button样式
  6. Android热修复之AndFix
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. python起点网月票榜字体反爬案例
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)面试总结之布局常见问题
  2. Android(安卓)应用间跳转
  3. Android部分控件的特殊属性
  4. Android判断当前的android设备是否处于联
  5. Android判断当前的android设备是否处于联
  6. Android(安卓)白板代码实现
  7. android开发之实现应用内音乐的播放
  8. Cordova 3.x 源码分析(6) -- cordova.js本
  9. Android利用TextView制作跑马灯该效果
  10. Android程序员必备精品资源