美文网首页
Android之坑

Android之坑

作者: 宝塔山上的猫 | 来源:发表于2016-09-19 23:38 被阅读102次

这只是一篇随便,在研究Android过程中的一些小坑或大坑将会随笔记下,以备来日观看,本文将会持续更新(有坑就更新)。

Toolbar中的小坑:

在研究Toobar的时候,跑去官网看文档去了,文档中的第三步是这样写的

3.In the app manifest, set the <application>
element to use one of appcompat's NoActionBar
themes. Using one of these themes prevents the app from using the native ActionBar
class to provide the app bar. For example:

<application android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

官方文档的第三步说的是如果要使用Toobar,那么久必须去除掉原生ActionBar,我们可以在AndroidMainfest.xml配置文件中直接在application的theme主题这里设置为NoActionBar的主题。

没错这确实可以去除掉ActionBar,显示Toobar。但坑人的是使用了这种方法之后,会发现Toobar是灰白样式的,它的colorPrimary/colorPrimaryDark/colorAccent这些设置都不能起作用,也就是说不能更换Toobar的颜色!

然后我就不明所以的疑惑了大半天,为什么是灰白色的呢?
其中的原因我不太了解,但是解决办法倒是找到了,既是不要在AndroidMainfest.xml配置文件中设置Theme为NoActionBar的主题,去styles.xml文件下的style下设置windowActionBar熟悉,代码如下:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <!-- Customize your theme here. -->
      <item name="android:windowActionBar">false</item>
      <item name="android:windowNoTitle">true</item>
      <item name="colorPrimary">@color/colorPrimary</item>
      <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
      <item name="colorAccent">@color/colorAccent</item>
      <item name="actionOverflowMenuStyle">@style/GoodStyle</item>
  </style>

  // GoodStyle样式可以设置Toolbar中的Menu项目会往下排,具体效果可以自己测试
  <style name="GoodStyle" parent="@style/Widget.AppCompat.Light.PopupMenu.Overflow">
      <item name="overlapAnchor">false</item>
  </style>

启动Activity和Dialog

在Andorid中启动Activity和弹出Dialog是要使用Context对象的,但是出于安全考虑,Activity是不允许凭空出现的,所以Activity必须在另一个Activity的基础上启动,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。

所以弹出dailog的时候传入的Context是getApplicationContext必定会报错。

而不再Actiivity中启动另一个Activity也是会报错的,可以在Intent中设置Flag为Intent.FLAG_ACTIVITY_NEW_TASK表示创建一个新的任务栈启动Activity,关键代码如下:

 inten.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

获取Applicaiton

在项目中经常会自定义一个Applicaiton,而在网络上经常看到大家获取Applicaiton的时候直接用单例模式这种错误方法,如下:

public class MyApplication extends Application {  
  
  private static MyApplication app;  
  
  public static MyApplication getInstance() {  
      if (app == null) {  
          app = new MyApplication();  
      }  
      return app;  
  }        
} 

为什么这是错误的方法呢?Application是属于系统组件,系统组件的实例是要由系统来去创建的,如果这里我们自己去new一个MyApplication的实例,它就只是一个普通的Java对象而已,而不具备任何Context的能力。
所以正确的写法应该是下面这种形式:

public class MyApplication extends Application {  
  
  private static MyApplication app;  
  
  public static MyApplication getInstance() {  
      return app;  
  }        
  @Override  
  public void onCreate() {  
      super.onCreate();  
      app = this;  
  }        
 }  

getInstance()方法可以照常提供,但是里面不要做任何逻辑判断,直接返回app对象就可以了,而app对象又是什么呢?在onCreate()方法中我们将app对象赋值成this,this就是当前Application的实例,那么app也就是当前Application的实例了。

相关文章

  • Android之坑

    这只是一篇随便,在研究Android过程中的一些小坑或大坑将会随笔记下,以备来日观看,本文将会持续更新(有坑就更新...

  • xamarin Android 插入图片后报错找不到资源文件

    Android插入图片之坑 最近在用xamarin.forms做一个Android的项目,在添加图片时遇到了大问题...

  • 我的简书文章导航

    把简书上的文章做个归整。 一、记录我的Android之坑 (八)Android判断麦克风是否被占用 (七)重复造轮...

  • Android 日常踩坑

    1、Android NDK开发踩坑 踩坑环境 Android Studio 3.4.1,JDK 1.8 1、为什么...

  • 2018-09-11

    安卓学习之菜鸟的挣扎(一) 写这个是为了记录自己学习Android路上的各种坑的...

  • Android 加密算法AES/RSA

    Android中的MD5和RSA加密Android应用安全开发之浅谈加密算法的坑 对称加密 在对称加密算法中,数据...

  • 0x00 Android入坑之环境配置

    之所以入坑Android是因为要入坑Android逆向,所以粗略配置了一下Android的开发环境,使用Andro...

  • H5学习之路

    持续更新中... 前言 从iOS开发入坑,途中掉入Android小坑,现在公司负责iOS及Android大坑,已经...

  • 我在Android开发中遇到的坑之微博正文点击处理

    我在Android开发中遇到的坑之微博正文点击处理 开发是一个漫长的过程,我们会遇到很多很多的坑,有些却是系统级的...

  • 【记一坑】Android lines 和 imeOptions同

    坑: android:singleLine="true"过时,用android:lines="1" 设置andro...

网友评论

      本文标题:Android之坑

      本文链接:https://www.haomeiwen.com/subject/zbwnettx.html