小编Mar*_*ski的帖子

转换Android项目以使用Gradle Script Kotlin

我想build.gradle使用Gradle Script Kotlin将我的Android项目中的文件从Groovy 转换为Kotlin.我喜欢Kotlin中的所有这些,但如果有一些限制,那么尽可能多.

让我们假设我只有一个空项目,刚从Android Studio"新应用程序"模板创建(minSdkVersion 15如果重要的话,使用AppCompat).我需要采取哪些步骤才能将此项目转换为Gradle Script Kotlin.

我希望这应该是我(以及其他所有人)的一个很好的起点,我可以处理我自己转换任何自定义逻辑.

android gradle kotlin android-gradle-plugin gradle-kotlin-dsl

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

在Robolectric测试中使用Android KeyStore

我正在尝试编写一些针对Android Keystore的测试用例.但是,当我编写以下测试用例时:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class FancyPantsUnitTest {
   @Test
   public void buildKey() {
        keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
        keyPairGenerator.initialize(4096);
        final KeyPair keyPair = keyPairGenerator.generateKeyPair();
   }
}
Run Code Online (Sandbox Code Playgroud)

这失败,出现以下异常:

org.junit.ComparisonFailure: expected:<null> but was:<java.security.KeyStoreException: AndroidKeyStore not found>
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我的目标是API等级23.

java android robolectric android-keystore

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

断开默认背景,例如TabLayout和工具栏中的EditText或按下状态

我使用TabLayout作为ViewPager的标签.当我按下某个标签时,我会得到带有奇怪颜色标签的背景.并且独立于TabLayout的EditText背景也在奇怪的视图中.API 19中的结果.在API 22中,所有工作都很完美

AA

当我按下工具栏中的后退按钮时,我有类似的背景和奇怪的颜色

BB

有片段xml,我使用TabLayout和工具栏

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
                </android.support.v7.widget.Toolbar>


            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="fixed"
                app:tabGravity="fill"
                app:tabIndicatorHeight="0dp"
                android:layout_marginBottom="10dp"
                />
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />
    </android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)



这是我使用EditText的片段xml

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="????????? ???? ????? ?????"
            android:textColor="@color/black"/>
         <EditText
                    android:id="@+id/edt_firstname"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="?????*"
                    android:textSize="15sp"
                    android:textColorHighlight="#F14040"
                    android:layout_marginTop="10dp"
                    style="@style/Base"
                    android:backgroundTint="@color/colorPrimary"
                    android:inputType="phone"
                    android:maxLength="13"
                    />
        <EditText
            android:id="@+id/lastname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="??????"
            android:textSize="15sp"
            android:textColorHighlight="#F14040"
            android:layout_marginTop="10dp"
            style="@style/Base"
            android:backgroundTint="@color/colorPrimary"
            android:inputType="textPassword"
            />
Run Code Online (Sandbox Code Playgroud)



这是我的风格xml

<style name="MyMaterialTheme" parent="MyMaterialTheme.Base">
</style>

<style name="MyMaterialTheme.Base" …
Run Code Online (Sandbox Code Playgroud)

android nine-patch

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

在Android N多窗口模式中删除导航视图顶部填充

我想从Android N的多窗口模式中删除paddingTop/ marginTop导航视图.就像Gmail一样.如果您看到下面的图像,我说的是正常的填充,其大小等于导航视图开头的状态栏.

在此输入图像描述

所以基本上在多窗口模式下(见下图)我必须在我的应用程序位于屏幕的第二部分时删除该填充.

在此输入图像描述

不幸的是,你可以从新的api 24获得,isInMultiWindowMode()但是不可能知道你的应用程序在屏幕的哪个部分.

android android-statusbar android-navigationview android-7.0-nougat

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

如何在 Kotlin 中引用匿名内部类?

我有以下扩展方法。如何引用OnGlobalLayoutListener传递给addOnGLobalLayoutListener()方法的 ?我需要将侦听器传递给该removeOnGlobalLayoutListener()方法。

fun View.OnGlobalLayout(callback:() -> Unit ): Unit{
    this.viewTreeObserver.addOnGlobalLayoutListener {
        if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            this.viewTreeObserver.removeOnGlobalLayoutListener(this);
        }
        else {
            this.viewTreeObserver.removeGlobalOnLayoutListener(this);
        }
        callback();
    }
}
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-extension

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

使用WorkManager入队时出现IllegalAccessException

IllegalAccessException当尝试使WorkManager 1.0稳定版入队时,我得到了。这是堆栈跟踪:

E/WM-WorkerFactory: Could not instantiate com.pocket.sdk.util.service.BackgroundSync$SyncJob
    java.lang.IllegalAccessException: java.lang.Class<com.example.BackgroundManager$BackgroundWorker> is not accessible from java.lang.Class<androidx.work.WorkerFactory>
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:92)
        at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:233)
        at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:127)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

worker是一个内部类,声明如下:

E/WM-WorkerFactory: Could not instantiate com.pocket.sdk.util.service.BackgroundSync$SyncJob
    java.lang.IllegalAccessException: java.lang.Class<com.example.BackgroundManager$BackgroundWorker> is not accessible from java.lang.Class<androidx.work.WorkerFactory>
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:92)
        at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:233)
        at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:127)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

如何解决此异常?

android android-workmanager

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

setContentView(R.Layout.main)vs startActivity(intent),哪个更常见?

请告诉我使用startActivity(intent)setContentView(R.Layout.main)
哪个更优选哪个应该在哪些条件下使用?
我想当我们想要执行我们使用的任何动作时startActivity(intent),只是在我们使用的不同页面中移动setContentView(R.Layout.main)

android android-intent android-view android-activity

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

如何扫描LAN网络中的设备

我想在局域网中进行扫描,以查找链接的设备.我正在IOS中为IPAD开发应用程序我该怎么办?

networking device ios network-scan

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

git reset --hard <sha1>.那删除了一切吗?

我有一个分支开发和一个分支前沿.

我在dev上提交了SHA1 id,说4356xyz.我希望它能走在前沿.所以我检查了前沿并做了

git reset --hard 4356xyz

现在,当我这样做时,git log我发现两个分支的历史都变得相同.在我进行重置之前,有没有办法恢复先前的尖端分支历史?

git github

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

如何在 Kotlin 中为每种 Number 类型实现地板取模?

目前,我正在学习科特林并试图创建在所有工作的延伸(中缀)方法号码类型ByteLongFloat等)。它应该像 Python 的%运算符一样工作:

 4   %   3  ==   1      // only this is the same as Java's %
 4   %  -3  ==  -2
-4   %   3  ==   2
-4   %  -3  ==  -1
Run Code Online (Sandbox Code Playgroud)

...或者像 Java 的Math.floorMod,但它也应该与Doubleor 一起使用Float

-4.3 %  3.2 ==   2.1000000000000005
Run Code Online (Sandbox Code Playgroud)

或这些类型的任何可能组合

 3   %  2.2 ==   0.7999999999999998
 3L  %  2.2f ==   0.7999999999999998
Run Code Online (Sandbox Code Playgroud)

以下按预期工作,但仅适用于两个Double或两个Int

inline infix fun Double.fmod(other: Double): Number { …
Run Code Online (Sandbox Code Playgroud)

modulo kotlin

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