我正在尝试让标准的Android ToggleButton呈现某种自定义样式:在未选中状态下,不显示边框/背景填充,在选中状态下,背景填充显示,当按下(选中或未选中)时会产生波纹效果显示为从一种状态过渡到另一种状态。
我已经做好了一切,大部分情况下都使用它作为ToggleButton的背景:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ripple" android:state_pressed="true"/>
<item android:drawable="@drawable/checked_bg" android:state_checked="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
波纹:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight" >
<item
android:id="@android:id/mask">
<color
android:color="@android:color/white" />
</item>
</ripple>
Run Code Online (Sandbox Code Playgroud)
checked_bg:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid
android:color="?android:attr/colorControlHighlight" />
</shape>
Run Code Online (Sandbox Code Playgroud)
但是,当我从选中状态转到未选中状态时,涟漪将实心填充应用于与选中按钮状态填充颜色不匹配的按钮,因此它似乎立即从一种颜色“跳转”到另一种颜色。我相信这是因为我在检查状态背景填充和波纹颜色上都使用了colorControlHighlight,因此波纹最终以该颜色开始,并以另一种稍微浅一点的颜色开始...
但是,我不能简单地将选中状态的背景填充更改为这种较浅的颜色,因为这会使我检查/打开按钮时看起来很奇怪-它会以较浅的颜色开始,与选中的背景填充相匹配,然后变成较深的颜色,然后立即再次跳至较浅的颜色。
有没有一种干净的方法来解决这个问题?还是我一端卡住了颜色变化?
或者,我可以使用两种不同的纹波,一种用于按下= true和checked = false,另一种用于按下= true和checked = true的情况,对吗?
在我的应用程序中,我将home作为up指示符设置为某些情况下的非默认drawable.有时,作为向上指示器的主页应在更改后重置为默认图标.
我试过用了
getSupportActionBar().setHomeAsUpIndicator(0);
Run Code Online (Sandbox Code Playgroud)
根据文档说,将使用主题默认.当我这样做时,应用程序崩溃,出现以下错误:
05-15 11:12:03.160: E/AndroidRuntime(13021): FATAL EXCEPTION: main
05-15 11:12:03.160: E/AndroidRuntime(13021): Process: xxxxx.yyyyyy.zzzzzz, PID: 13021
05-15 11:12:03.160: E/AndroidRuntime(13021): android.content.res.Resources$NotFoundException: Resource ID #0x0
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getValue(Resources.java:1233)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getDrawable(Resources.java:756)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.Context.getDrawable(Context.java:402)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:133)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.widget.Toolbar.setNavigationIcon(Toolbar.java:754)
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.app.ToolbarActionBar.setHomeAsUpIndicator(ToolbarActionBar.java:176)
05-15 11:12:03.160: E/AndroidRuntime(13021): at xxxxx.yyyyyy.zzzzzz.updateHomeIndicator(aaaaa.java:1711)
Run Code Online (Sandbox Code Playgroud)
我知道主题默认值设置正确,因为如果我从未将自定义主页设置为向上指示符,则后退箭头显示正常.我在打电话setDisplayHomeAsUpEnabled(true)
前setHomeAsUpIndicator(0)
打电话.
我知道我总是可以将默认主页作为向上指标资产复制到我的项目中并直接使用该资产,但我想尽可能避免这种解决方法.
谢谢!
扎克
编辑: …
android android-actionbar android-support-library android-toolbar
在运行 Android Instrumented Tests 时,是否可以使用 JUnit 测试提供的内置代码覆盖功能?
PHAsset
有一个creationDate
属性给出资产的创建日期(UTC)。
如果我在 UTC-6 晚上 10:52 拍摄照片,则该creationDate
酒店的时间为凌晨 03:52。
我如何知道照片拍摄的“真实”时间?该creationDate
酒店未提供时区信息,因此我无法将其调整回晚上 10:52 - 我不知道在调整时要调整哪个时区...
我知道我可以获取 EXIF 创建日期(或至少尝试)使用PHImageManager requestImageDataForAsset
并使用那里返回的数据来获取 EXIF 创建日期,该日期实际上是晚上 10:52,但这会导致照片在iCloud(我需要用户库中所有资产的创建日期值)。此外,我不知道如何获取视频的 EXIF 创建日期。
我还知道有一些从 a 获取时区的方法CLLocation
,我可以用它来调整creationDate
- 但这些方法要么受到速率限制,要么不准确
是否有另一种更简单的方法来获取此原始创建日期值?
回顾一下:
从 AGP 7.2.0-alpha01 及更高版本(包括 7.2.0、7.3.x 和 7.4.x 预览版本)开始,jacoco 覆盖范围无法正常工作,尽管所有配置/信息似乎都按预期设置/工作。
在 AGP 7.1.3 上,覆盖率显示达到预期的 %s(对于我正在使用的应用程序来说非常高 - 可以说高于 90%) - 一切都很健康。当我切换到任何较新的 AGP 版本时,覆盖率几乎下降到 10% 或更低。一些覆盖数据确实会显示,但应用程序中的大多数课程都显示为未覆盖。我没有看到为什么有些数据显示而有些数据不显示的模式。仅通过仪器测试测试的类和仅通过常规单元测试测试的其他类都缺少数据 - 并且也存在相反的情况(意味着在这些情况下数据显示为少数类),因此非常令人困惑......
我像这样设置我的 jacoco 任务:
task developDebugCodeCoverageReport(type: JacocoReport, dependsOn: ['testDevelopDebugUnitTest', 'createDevelopDebugCoverageReport']) {
group = 'Code Coverage'
description = 'Generate Jacoco coverage reports for the developDebug build'
reports {
html.required.set(true)
xml.required.set(true)
}
def excludes = [
// list of files I want to exclude
]
def javaClasses = fileTree(dir: "${buildDir}/intermediates/javac/developDebug/classes", excludes: excludes)
def kotlinClasses = fileTree(dir: …
Run Code Online (Sandbox Code Playgroud) 当我在 Android Studio (Analyze -> Inspect Code) 中运行 lint 时,我看到我的应用程序中有许多问题的报告。但是,当我运行时,gradlew lint
我被告知不存在任何问题!
我lintOptions
在我的部分app.gradle
文件:
lintOptions {
warningsAsErrors true
abortOnError true
xmlReport false
htmlOutput project.file('build/reports/lint/lint-report.html')
}
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?为什么在使用gradlew lint
命令时会发现零问题?