小编lio*_*ibe的帖子

Gradle - 在buildscript依赖项中添加条件类路径

我已更新到Android Studio 2.2,它默认使用Gradle Plugin v2.2.0,并且更适合调试目的.出于分配目的,我仍然必须使用v2.1.3.我在考虑在项目gradle脚本中添加条件命令,但我不知道该怎么做.以下测试有效

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        if (project.name.startsWith("X"))
        {
            classpath 'com.android.tools.build:gradle:2.1.3'
        }
        else
        {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我需要这样的东西

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        if (IS_RELEASE_VERSION)
        {
            classpath 'com.android.tools.build:gradle:2.1.3'
        }
        else
        {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何做到这一点.提前致谢

android gradle android-studio build.gradle android-gradle-plugin

5
推荐指数
1
解决办法
1098
查看次数

AsyncLayoutInflator Pitfulls

Android在AsyncLayoutInflater支持libaray 24.0及更高版本的基础上增加了一个新类,可在Android SDK 4.0或更高版本(几乎所有可用的设备)中使用。
根据Android的文档;

用于异步扩大布局的Helper类。若要使用,请在UI线程上构造AsyncLayoutInflater的实例,然后调用inflate(int,ViewGroup,OnInflateFinishedListener)。膨胀请求完成后,将在UI线程上调用AsyncLayoutInflater.OnInflateFinishedListener。

这适用于延迟创建的UI部分或响应用户交互的部分UI。这允许UI线程在执行相对较重的膨胀时继续响应和设置动画。

我实际上发现这很有用,正如您可能意识到或未意识到的那样,在一个时间上夸大一个复杂的视图是一项昂贵的操作,有时需要100毫秒。因此,当它在主线程上膨胀时,UI可能会变慢。

我发现的另一个好处是,Activities的加载时间更快,因为UI线程可以继续加载下一步,而视图是单独膨胀的。有时,我可以使用这种方法大大加快App启动时间。

话虽这么说,但使用单独的线程来充实视图时可能会发生陷阱。我们将在答案中对其进行解释。

performance multithreading android android-layout android-fragments

5
推荐指数
1
解决办法
1862
查看次数

导航视图菜单不更新

我在这里写的是关于我们从 AppCompat 库迁移到 AndroidX 库时引入的一个问题。在此过程中,当以下问题开始时,我们从 切换android.support.design.widget.NavigationView到 and that\xe2\x80\x99s。com.google.android.material.navigation.NavigationView

\n\n

在我们的NavigationView设计中,为了节省空间,我们实现了一个可展开的菜单,这样当用户点击\xe2\x80\x9cmore\xe2\x80\x9d按钮时,菜单就会展开以显示更多选项。一开始只有一些选项可见,其余选项不可见,如下所示;

\n\n
\n\n
    \n
  • 选项1
  • \n
  • 选项2
  • \n
  • 更多\xe2\x80\xa6
  • \n
\n\n
\n\n

单击 \xe2\x80\x9cMore...\xe2\x80\x9d 按钮后,菜单将扩展为;

\n\n
\n\n
    \n
  • 选项1
  • \n
  • 选项2
  • \n
  • 选项3
  • \n
  • 选项4
  • \n
  • 选项5
  • \n
  • 选项6
  • \n
\n\n
\n\n

为此,我们使用以下代码;

\n\n
@Override\npublic boolean onNavigationItemSelected(MenuItem item)\n{\n    ....\n    if (item.getItemId() == R.id.nav_more)\n    {\n        item.setVisible(false); // hide the \xe2\x80\x9cMore\xe2\x80\x9d item\n        getMenu().findItem(R.id.nav_option_3).setVisible(true);\n        getMenu().findItem(R.id.nav_option_4).setVisible(true);\n        getMenu().findItem(R.id.nav_option_5).setVisible(true);\n        getMenu().findItem(R.id.nav_option_6).setVisible(true);\n        return true;\n    }\n    .......\n    return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

好吧,这段代码在过去是有效的,但是当我们迁移到使用 androidx 库时,噗,它停止工作了。嗯,确实起到了一点作用。\xe2\x80\x9c更多...\xe2\x80\x9d 按钮被隐藏,但之前隐藏的选项没有显示。\n因为,我花了很多小时才解决这个问题,并避免其他人头痛,我会解释一下问题和解决方案。

\n\n

在这种情况下要做的第一件事就是查看源代码。由于代码是开源的,我可以在 github …

android navigation-drawer android-navigation android-navigationview

1
推荐指数
1
解决办法
446
查看次数