Android细节002

31

去掉默认主题的ActionBar的代码实现

        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

32

添加系统原生menu,要有ActionBar存在

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

33

Intent传递数据

//Intent传递数据
intent.putExtra("key",str);
//取出Intent的数据
Intent intent=getIntent();
String str=intent.getStringExtra("key"); 

Intent传递数据给上一个Activity

//获取返回值的方式启动
startActivityForResult(intent)
//返回数据
intent.putExtra("key",str);
setResult(Result_OK,intent)
//第一个Activity中覆写方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

34

知晓当前界面是哪个Activity:

建一个Activity的基类在oncreate打印当前Activity类名,

 

随时退出程序:

建一个Activity管理器,管理Activity的添加删除和清空(静态方法)

 

启动Activity的最佳写法:

在要启动的Activity中写一个静态启动方法,参数包含要传递的数据,当启动该Activity时直接用该静态方法即可

35

活动与碎片通信

活动获取碎片getSupportFragmentManager()

碎片获取活动,getActivity()

碎片与碎片,同理

36

一个很好用的Android源码查找网站

http://androidxref.com

37

全局Context

应用程序启动会先初始化Application类,我们可以自定义一个MyApplication extend Application,然后在里面提供一个全局的Context

记得在AndroidManifest中<application>中的android:name中注册

38

Intent传递自定义对象

一种方法用Serializabel接口,还有一种方法用Parcelable接口

两种区别是Serializable将整个对象序列化,而Parcelable可以部分序列化,效率上Parcelable更高

39

定制日志工具

在开发过程中总会打印很多日志调试程序,但程序上线要一行行删日志打印代码就很麻烦,可以自定义一个日志打印工具来管理要显示哪些级别日志

40

手机多窗口状态

2个应用程序同时显示(一般不会去用多窗口模式)

(生命周期:操作一个应用时另一个应用的activity进入暂停状态)

禁用多窗口模式android:resizeableActivity=false

41

记录一次R集体报红

classpath 'com.android.tools.build:gradle:3.2.1'

版本设置不正确导致的R报红

42

actionbar的title设置

actionBar.setTitle("一个自定义Title");

不要去AndroidManifest中设置android:label="一个自定义Title",这样会改变APP的名称

43

//活动布局显示在状态栏上并使状态栏透明
if (Build.VERSION.SDK_INT>=21){
    View decorView=getWindow().getDecorView();
    //第一个flag为全屏显示,第二个flag保证状态栏可见
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}

测了一下最外层内容布局的高度,确实增加了一段状态栏的高度 

可以配合使用android:fitsSystemWindows="true"来达到自动添加状态栏高度的一段内间距

44

记录一次Gradle加载不了远程库的问题

com.squareup.okhttp3:okhttp:3.12.0升级到了com.squareup.okhttp3:okhttp:3.12.1,导致前一个版本无法远程加载

45

android:hardwareAccelerated="true"开启针对一个Activity的硬件加速

46

view.setTag(...)用于存储一个标志或者数据

view.getTag()取出保存的标志或者数据

47

Message的三种创建方法的区别
Message msg = new Message(); 
Message msg2 = Message.obtain(); 
Message msg1 = handle.obtainMessage(); 

第一种直接创建一个新的Message对象

第二种查看源码得知,从整个Messge池中返回一个新的Message实例,如果池中没有Message实例则新建一个,

通过Message.obtain(); 能避免重复Message创建对象。 (推荐)

第三种是Handler对象中的方法,机制和第二种一样,从目标handler中获取

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值