小编Mic*_*oka的帖子

Dart/Flutter 防止格式化程序将方法调用压缩到一行

我的格式化程序一直在做这样的事情。当我尝试将方法调用放在单独的行中时。例如我有这样的代码:

main() {
  SomeObject()
    .someMethod()
    .someMethodWithArgument('someArgument')
    .someMethodWithArgument('someOtherArgument');
}
Run Code Online (Sandbox Code Playgroud)

点击快速格式化后,我得到了类似的东西:

main() {
  SomeObject().someMethod().someMethodWithArgument('someArgument')
    .someMethodWithArgument('someOtherArgument');
}
Run Code Online (Sandbox Code Playgroud)

它让我发疯,在我看来这是完全不可读的。我在 Android Studio 首选项中尝试了格式设置,但找不到可以解决此特定格式问题的任何内容。

dart android-studio flutter

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

为什么Android Studio可点击属性中出现警告,请添加焦点

我不喜欢在布局中使用xml做很多事情,但我可以很好地阅读它,一切正常.为什么会出现此警告?我可以肯定地禁用它,但我只是不理解它.我只是希望底部视图捕获点击事件,这样他们就不会陷入困境,这似乎运作良好且可点击是这样做的,所以我根本不需要专注于那里,但我看到它......

android android-layout

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

Canvas显示黑色位图的透明部分 - Android

在我的Android应用程序中,我想绘制两个图像 - img1和img2.首先,我将绘制img2 Canvas.之后,我将绘制Canvas与img2重叠的img1 .Img1包含透明部分.问题是,img1的透明部分以黑色显示,但我希望通过img1的透明部分可以看到img2.我无法做到这一点.请帮我解决这个问题.谢谢.

码:

protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Bitmap b = BitmapFactory.decodeResource(getResources(),
                R.drawable.white_bg);    //img2
        canvas.drawBitmap(b, 0, 0, null);
        canvas.save();

        canvas.drawBitmap(realImage, 0, 0, null);  //img1
    }
Run Code Online (Sandbox Code Playgroud)

android bitmap ondraw android-canvas android-view

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

如何在 WearableActivity 中获取 LifecycleOwner?

当我尝试使用 Wea​​rableActivity 中的 LiveData 时遇到问题:

val livedata = ...
val observer = ...
livedata.observe(this, observer)
Run Code Online (Sandbox Code Playgroud)

当我使用扩展 AppCompatActivity 的活动时它工作,但看起来 WearableActivity 没有实现 LifecycleOwner 接口,尽管它确实拥有生命周期,对吧?(observe 方法需要 LifecycleOwner 作为第一个参数)。我怎样才能让它工作?

android kotlin android-room android-livedata

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

使用PowerMockRunner测试LiveData

我的本地单元测试始终使用LiveData。通常,当您尝试在MutableLiveData上设置值时,会得到

java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.
Run Code Online (Sandbox Code Playgroud)

因为本地JVM无法访问Android框架。我使用以下方法修复了该问题:

@get:Rule
val rule = InstantTaskExecutorRule()
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我不得不使用PowerMockito模拟来自Google Play库的静态方法。自从我添加

@RunWith(PowerMockRunner::class)
@PrepareForTest(Tasks::class)
Run Code Online (Sandbox Code Playgroud)

在我的测试类声明之上,我开始再次得到这个Looper not模拟错误。我之前在MockitoJUnitRunner中使用了此规则,一切都很好。

android kotlin powermockito android-livedata

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

Dagger2 与 Androidx,SupportFragmentInjector 问题

我正在尝试在新应用程序中实现 Dagger2 注入,唯一失败的是 DaggerAppCompatActivity 和 SupportFragmentInjector。

当我转到 DaggerAppCompatActivity 代码时,我看到:

在此处输入图片说明

它尝试在 androidx 重构之前从库版本中引用 AppCompatActivity 和 Fragment。当我继承这个类时,我什至不能调用 setContentView(),因为它不可用。

我想将此代码复制粘贴到我自己的基本活动中,但 HasSupportFragmentInjector 使用 pre-adroidX Fragment。

有没有办法让它与 AndroidX 一起工作?

编辑:这是我在尝试使用 DaggerAppCompatActivity 作为@ContributesAndroidInjector 提到的活动的基类时得到的错误。如果我只是简单地做 AndroidInjection.inject(this) 而不是这个继承,它工作得很好。

C:\Users\micha\Workspace\StudioProjects\BirthdayGift\app\build\tmp\kapt3\stubs\debug\com\mpowloka\birthdaygift\common\di\ApplicationComponent.java:8: error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends androidx.fragment.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends androidx.fragment.app.Fragment>>> cannot be provided without an @Provides-annotated method.
public abstract interface ApplicationComponent {
                ^
      java.util.Map<java.lang.Class<? extends androidx.fragment.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends androidx.fragment.app.Fragment>>> is injected at
          dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
      dagger.android.DispatchingAndroidInjector<androidx.fragment.app.Fragment> is injected at
          dagger.android.support.DaggerAppCompatActivity.supportFragmentInjector
      com.mpowloka.birthdaygift.persons.PersonsActivity is injected at
          dagger.android.AndroidInjector.inject(T)
  component path: com.mpowloka.birthdaygift.common.di.ApplicationComponent ? com.mpowloka.birthdaygift.common.di.ActivityBindingModule_PersonsActivity.PersonsActivitySubcomponent
Run Code Online (Sandbox Code Playgroud)

编辑 2:我的项目依赖项(包含在单独的 gradle 文件中): …

android android-support-library dagger androidx

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

Java/Kotlin/Android - 格式化时间 (hh:mm:ss) 并从开头删除不必要的零

我的应用程序以 hh:mm:ss 格式显示剩余时间,例如,01:05:45 代表一小时 5 分 45 秒。

当小时或分钟为零时,我不想显示它们。目前,如果还剩 45 秒,我的计时器将显示“00:00:45”。预期的结果只是“45”。

我需要某种 Java/Kotlin/Android 方法来产生以下输出:

  • 1 小时 13 分 10 秒 ==> 01:13:10
  • 0 小时 13 分 10 秒 ==> 13:10
  • 3 小时 0 分 16 秒 ==> 03:00:16
  • 0 小时 0 分 5 秒 ==> 5

目前我使用这样的字符串作为格式化程序:

<string name="time_default_formatter" translatable="false">%02d:%02d:%02d</string>
Run Code Online (Sandbox Code Playgroud)

我试图用“”手动替换字符串“00:”,但在第三个例子中失败了。另外,我认为标准格式应该提供类似的东西,但我一直找不到它。

编辑:我可以用代码来做。问题是我正在寻找一个优雅的解决方案。

java format android string-formatting kotlin

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

我可以相信 System.nanoTime() 每次调用都会返回不同的值吗?

我的程序需要生成由标签、日期和时间组成的唯一标签。像这样的东西:

"myTag__2019_09_05__07_51"
Run Code Online (Sandbox Code Playgroud)

如果一个人试图在同一分钟内生成两个具有相同标签的标签,一个人将收到相同的标签,这是我不能允许的。我考虑添加作为 System.nanoTime() 的附加后缀结果,以确保每个标签都是唯一的(我无法访问之前生成的所有标签来查找重复项):

"myTag__2019_09_05__07_51__{System.nanoTime() result}"
Run Code Online (Sandbox Code Playgroud)

我可以相信每次调用 System.nanoTime() 都会产生不同的值吗?我在我的笔记本电脑上进行了这样的测试:

assertNotEquals(System.nanoTime(), System.nanoTime())
Run Code Online (Sandbox Code Playgroud)

这有效。我想知道我是否能保证它永远有效。

java

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