系统总结归纳一下android

又是一年,慢慢开始往大前端趋势转,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.class
Intent 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.class
Intent 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";>

<Preference
android:key="clear_cache"
android:title="清除缓存" />
<SwitchPreference
android:key="push"
android:title="推送通知" />
<SwitchPreference
android:key="no_wifi"
android:title="非wifi下加载tup" />
<Preference
android: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" />

<fragment
android: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"
>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值