从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徽标,单独使用.
奇怪的是,它是72x72,而不是48x48,我希望看到.
也许这就是全部 - 我们只需要在mipmap文件夹中保留更大的图标?
更新#2
2014年10月23日的Android开发者博客文章再次证实了将mipmap
文件夹用于应用程序图标的想法:
基本的"片段教程"模式是这样的:
Fragments
并且两者都存在于同一个中Activity
.Fragment
中的一个Activity
.Activity
的细节Fragment
.(例如Dianne Hackborn的Android 3.0 Fragments API和Fragments API指南)
在这两个设备上,功能都在Fragments
.(简单)
在平板电脑上,整个应用程序是1Activity
,在手机上,有很多Activities
.
Activities
?此方法的一个问题是,您复制了主平板电脑Activity
和单独电话中的大量逻辑Activities
.
Fragments
出逻辑(仅使用不同的布局),在两种情况下保留1活动模型会不会更容易?这种方式大部分逻辑都存在于Fragments
自身中,并且只有一个Activity
- 更少的代码重复.
我所读到的ActionBarSherlock
也是它似乎最好用Fragments
而不是Activities
(但我还没有使用它).
教程是否过于简化,或者我错过了这种方法的主要内容?
我们已经在办公室成功地尝试了这两种方法 - 但我即将开始一个更大的项目,并希望尽可能让自己变得容易.
一些相关问题的链接:
所以目前我有一个可以从两个不同活动中获得的活动,问题是我只能将一个活动设置为清单XML文件中的父活动.显然这是糟糕的UX/UI设计,因为活动可能会将用户发回到之前的错误活动,所以我试图动态设置哪个活动是父活动.
问题是我不太确定如何处理这个问题,无论是代码还是XML,所以任何指针都会受到赞赏.:)
我的Android应用程序有很多种,我希望除了一个以外的所有应用程序都使用相同的密钥.有一个需要使用不同的密钥.
如何覆盖signingConfig
应用程序的1种风格(但在相同的构建类型中,例如"发布")?
gradlew assembleRelease
命令运行所有发布版本最后一点非常重要,因为我目前有超过120种不同的口味和成长.为了单独定制每一种风味,需要做很多额外的工作.
相关帖子我试过:
signingConfig
反正buildTypes
内部,productFlavors
但我不明白如何做到这一点.总的来说,每个解决方案似乎仍然使用默认的发布配置,而不是我的自定义配置.
我的重要部分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) 我想在我的Xamarin.Android项目中保存并检索一些应用程序设置.
我知道在Android(java)中,我使用类SharedPreferences
来存储这些信息,但我不知道如何将其转换为Xamarin C#.
当我在Xamarin Studio IDE中输入"SharedPreferences"时,没有自动完成,所以我不知道该使用什么.
初步搜索interwebs带我到一个相关的问题,但只包含Android java:
总结一下:
SharedPreferences
?参考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
我已经使用SQLiteOpenHelper
某些类中的android.database包实现了对数据库的访问(使用模式DAO).
我使用a为这些类编写了一些junit测试,AndroidTestCase
但这导致测试使用与应用程序相同的数据库.
我读过ProviderTestCase2
或者RenamingDelegatingContext
可以用来分别测试数据库.不幸的是,我找不到任何很好的教程/示例,展示了如何使用ProviderTestCase2/RenamingDelegatingContext测试数据库.
任何人都可以指点我或给我一些提示或分享一些代码进行数据库测试?!
Cheeerrrrsss!乔治
有没有任何类型的xml参考?
我发现这对我来说非常宝贵
但我无法弄清楚我应该知道如何做到这一点,如果我没找到那个帖子.
我知道api引用有许多类列出的xml属性......但是xml标签呢?它记录在哪里,我可以使用建的形状<padding>
,<corners>
,<solid>
标签?
我真的很想知道在哪里可以找到这样的文档.
我希望能够覆盖导航栏上的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)
然而,这似乎不适用于软导航栏按钮,它适用于所有控制器,而不仅仅是一个控制器.
我即将向市场发布一个新版本的应用程序.为了避免任何潜在的问题,一旦它被推向市场并且人们得到更新的通知,我想在我的手机上使用.apk模拟我将要发布的新版本应用程序的过程.
例如,它对它正在使用的SQLite DB进行了更新.
我能找到的最接近的是使用Android Debug Bridge(adb)命令:
adb install C:\myApplication.apk
我的手机通过usb线连接到我的电脑.(该参数表示您的PC上的apk文件).
当我这样做,如果我的手机上已经安装了该应用程序,我收到一条错误消息:
失败安装失败已经存在.
如果我从手机中删除现有的应用程序,该adb install
命令工作正常.因此,看起来这只能用于安装手机上当前不存在的应用.
有没有办法模拟更新过程?如果有adb update
命令会很好,但我没有看到.