小编Ric*_*ier的帖子

Mipmap drawables图标

从Android 4.3(Jelly Bean)开始,我们现在可以利用这些res/mipmap文件夹来存储"mipmap"图像.

例如,Chrome for Android将其图标存储在这些文件夹中,而不是更常用的res/drawable文件夹中.

这些mipmap图像与其他熟悉的可绘制图像有何不同?

我看到在我的清单中,我们使用@mipmap/限定符,而不是@drawable/,这对于资源文件夹名称是有意义的:

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />
Run Code Online (Sandbox Code Playgroud)

参考文献:

Android 4.3的API的文档具有下面要说:

使用mipmap作为位图或drawable的源是提供高质量图像和各种图像比例的简单方法,如果您希望在动画期间缩放图像,这可能特别有用.

Android 4.2(API级别17)在Bitmap类中添加了对mipmap的支持 - 当您提供了mipmap源并启用了setHasMipMap()时,Android会在您的Bitmap中交换mip图像.现在在Android 4.3中,您还可以通过提供mipmap资源并在位图资源文件中设置android:mipMap属性或通过调用hasMipMap()来为BitmapDrawable对象启用mipmaps.

我没有看到任何有助于我理解的东西.


XML Bitmap资源具有以下android:mipMap属性:

布尔.启用或禁用mipmap提示.有关更多信息,请参见setHasMipMap().默认值为false.

就我所见,这不适用于启动器图标.


问题出现在Google网上论坛(资源名称"mipmap"的目的?!)上,Romain Guy回复道:

提供通常可以计算的更大分辨率的图像很有用(例如,在mdpi设备上,Launcher可能希望更大的hdpi图标显示大型应用程序快捷方式.)

我觉得这几乎是有意义的,但并不完全.

我仍然倾向于选择Randy Sugianto的跟进:

这有什么好处?是否有任何指南如何使用mipmap,可能是为了更好的启动器图标?


当然,维基百科有一个"Mipmap"页面,它指的是一种1983年发明的旧技术,我无法与当前的Android实现相关联.


我们现在应该将所有应用程序图标res/mipmap存储文件夹中吗?这些mipmap图像的准则是什么?


更新#1

这是一篇博文,试图解释一下.

但是该博客文章中使用的图像显示了一个包含许多徽标的文件.这不是我在Chrome的mipmap文件夹中看到的.

Chrome的mipmap-hdpi文件夹包含三张图片.一个是Chrome徽标,单独使用.

Chrome mipmap-hdpi icon.png

奇怪的是,它是72x72,而不是48x48,我希望看到.

也许这就是全部 - 我们只需要在mipmap文件夹中保留更大的图标?


更新#2

2014年10月23日的Android开发者博客文章再次证实了将mipmap文件夹用于应用程序图标的想法:

android mipmaps android-drawable

438
推荐指数
5
解决办法
18万
查看次数

多少活动与碎片?

介绍:

基本的"片段教程"模式是这样的:

  1. 在平板电脑上,左侧有一个列表,右侧有详细信息.
  2. 两者都存在 Fragments并且两者都存在于同一个中Activity.
  3. 在手机上,有一个列表Fragment中的一个Activity.
  4. 推出一个新Activity的细节Fragment.

(例如Dianne Hackborn的Android 3.0 Fragments APIFragments API指南)

在这两个设备上,功能都在Fragments.(简单)

平板电脑上,整个应用程序是1Activity,在手机上,有很多Activities.


问题:

  • 是否有理由将手机应用程序拆分为多个Activities

此方法的一个问题是,您复制了主平板电脑Activity和单独电话中的大量逻辑Activities.

  • 使用相同的切入和切Fragments出逻辑(仅使用不同的布局),在两种情况下保留1活动模型会不会更容易?

这种方式大部分逻辑都存在于Fragments自身中,并且只有一个Activity- 更少的代码重复.

我所读到的ActionBarSherlock也是它似乎最好用Fragments而不是Activities(但我还没有使用它).

教程是否过于简化,或者我错过了这种方法的主要内容?


我们已经在办公室成功地尝试了这两种方法 - 但我即将开始一个更大的项目,并希望尽可能让自己变得容易.

一些相关问题的链接:

android android-fragments android-listfragment

184
推荐指数
3
解决办法
3万
查看次数

动态设置父活动

所以目前我有一个可以从两个不同活动中获得的活动,问题是我只能将一个活动设置为清单XML文件中的父活动.显然这是糟糕的UX/UI设计,因为活动可能会将用户发回到之前的错误活动,所以我试图动态设置哪个活动是父活动.

问题是我不太确定如何处理这个问题,无论是代码还是XML,所以任何指针都会受到赞赏.:)

android

58
推荐指数
4
解决办法
3万
查看次数

Gradle在Android上使用不同的密钥签名

我的Android应用程序有很多种,我希望除了一个以外的所有应用程序都使用相同的密钥.有一个需要使用不同的密钥.

如何覆盖signingConfig应用程序的1种风格(但在相同的构建类型中,例如"发布")?

  • 我希望默认情况下所有构建都使用主要版本配置.
  • 我只想覆盖1种味道
  • 我希望能够使用单个gradlew assembleRelease命令运行所有发布版本

最后一点非常重要,因为我目前有超过120种不同的口味和成长.为了单独定制每一种风味,需要做很多额外的工作.


相关帖子我试过:

使用单个构建类型的不同键生成多个构建

  • 这需要配置每种口味
  • 它似乎并没有使用个性化的signingConfig反正

用gradle签署产品口味

  • 接受的解决方案不起作用(对我而言)
  • 根据评论,这可能是通过放入buildTypes内部,productFlavors但我不明白如何做到这一点.

在Gradle产品口味上调试签名配置

总的来说,每个解决方案似乎仍然使用默认的发布配置,而不是我的自定义配置.


我的重要部分build.gradle看起来像这样:

signingConfigs {
    releaseConfig {
        storeFile file('key')
        storePassword "pass"
        keyAlias "alias"
        keyPassword "pass"
    }

    custom {
        storeFile file('custom_key')
        storePassword "pass"
        keyAlias "alias"
        keyPassword "pass"
    }
}

productFlavors {
    apple {
        applicationId "demo.apple"
    }
    banana {
        applicationId "demo.banana"
    }

    // …
Run Code Online (Sandbox Code Playgroud)

android code-signing gradle android-gradle-plugin

43
推荐指数
2
解决办法
1万
查看次数

如何在Xamarin.Android中使用SharedPreferences?

我想在我的Xamarin.Android项目中保存并检索一些应用程序设置.

我知道在Android(java)中,我使用类SharedPreferences来存储这些信息,但我不知道如何将其转换为Xamarin C#.

当我在Xamarin Studio IDE中输入"SharedPreferences"时,没有自动完成,所以我不知道该使用什么.


初步搜索interwebs带我到一个相关的问题,但只包含Android java:


总结一下:

  • 什么是Xamarin Android C#等同于Android Java SharedPreferences

android xamarin.android xamarin

38
推荐指数
3
解决办法
3万
查看次数

手动清除Android ViewModel?

参考android.arch.lifecycle.ViewModel课程.

ViewModel限定在与其相关的UI组件的生命周期中,因此在Fragment基于应用程序的应用程序中,这将是片段生命周期.这是一件好事.


在某些情况下,人们想要ViewModel在多个片段之间共享实例.具体而言,我对许多屏幕与相同基础数据相关的情况感兴趣.

(当多个相关片段显示在同一个屏幕上时,文档提出了相似的方法,但这可以通过使用单个宿主片段来解决,如下面的答案所示.)

这在官方ViewModel文档中讨论:

ViewModels还可以用作活动的不同片段之间的通信层.每个Fragment都可以通过其Activity使用相同的密钥获取ViewModel.这允许以解耦方式在片段之间进行通信,使得它们永远不需要直接与其他片段对话.

换句话说,要在表示不同屏幕的片段之间共享信息,ViewModel应将其范围限定为Activity生命周期(并且根据Android文档,这也可以在其他共享实例中使用).


现在,在新的Jetpack导航模式中,建议使用"One Activity/Many Fragments"架构.这意味着活动在应用程序使用的整个过程中都存在.

即任何ViewModel作用于Activity生命周期的共享实例永远不会被清除 - 内存仍然在不断使用.

为了保留内存并在任何时间点使用尽可能少的内容,能够ViewModel在不再需要时清除共享实例会很好.


如何ViewModel从它ViewModelStore或持有者片段手动清除?

android android-viewmodel android-architecture-components android-jetpack

36
推荐指数
5
解决办法
7780
查看次数

在Android上测试数据库:ProviderTestCase2或RenamingDelegatingContext?

我已经使用SQLiteOpenHelper某些类中的android.database包实现了对数据库的访问(使用模式DAO).

我使用a为这些类编写了一些junit测试,AndroidTestCase但这导致测试使用与应用程序相同的数据库.

我读过ProviderTestCase2或者RenamingDelegatingContext可以用来分别测试数据库.不幸的是,我找不到任何很好的教程/示例,展示了如何使用ProviderTestCase2/RenamingDelegatingContext测试数据库.

任何人都可以指点我或给我一些提示或分享一些代码进行数据库测试?!

Cheeerrrrsss!乔治

database testing android android-testing

29
推荐指数
2
解决办法
2万
查看次数

有没有Android XML文档?

有没有任何类型的xml参考?

我发现这对我来说非常宝贵

但我无法弄清楚我应该知道如何做到这一点,如果我没找到那个帖子.

我知道api引用有许多类列出的xml属性......但是xml标签呢?它记录在哪里,我可以使用建的形状<padding>,<corners>,<solid>标签?

我真的很想知道在哪里可以找到这样的文档.

xml api android reference

28
推荐指数
2
解决办法
2万
查看次数

Ionic覆盖特定控制器的所有BACK按钮行为

我希望能够覆盖导航栏上的BACK按钮和硬件按钮.

我希望这个覆盖是针对一个特定的控制器,而不是其他控制器.

  • 当用户移动到另一个屏幕时必须取消它

(使用离子v1.0.0铀 - 独角兽)


我的理由是我有一个项目清单.单击列表将打开一个详细信息页面,其中包含3个选项卡.每个选项卡共享同一个控制器.

但是,在任何这些选项卡上按BACK必须返回主列表.这就是它在本机设备上的工作方式,所以我希望它能够在我的混合应用程序上运行.


在线提供的许多解决方案似乎适用于较旧的beta版本,或者用于控制器之外的注册.

在控制器内部使用Android硬件按钮的常见解决方案是:

$ionicPlatform.registerBackButtonAction(function (event) {
  if($state.current.name=="home"){
    alert("button back");
  }
}, 100);
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不适用于软导航栏按钮,它适用于所有控制器,而不仅仅是一个控制器.

ionic-framework ionic

23
推荐指数
2
解决办法
4万
查看次数

如何测试将应用程序的更新发布到Market时会发生什么

我即将向市场发布一个新版本的应用程序.为了避免任何潜在的问题,一旦它被推向市场并且人们得到更新的通知,我想在我的手机上使用.apk模拟我将要发布的新版本应用程序的过程.

例如,它对它正在使用的SQLite DB进行了更新.

我能找到的最接近的是使用Android Debug Bridge(adb)命令: adb install C:\myApplication.apk 我的手机通过usb线连接到我的电脑.(该参数表示您的PC上的apk文件).

当我这样做,如果我的手机上已经安装了该应用程序,我收到一条错误消息:

失败安装失败已经存在.

如果我从手机中删除现有的应用程序,该adb install命令工作正常.因此,看起来这只能用于安装手机上当前不存在的应用.

有没有办法模拟更新过程?如果有adb update命令会很好,但我没有看到.

android publish simulate adb

17
推荐指数
2
解决办法
7234
查看次数