我想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
我正在尝试编写一些针对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.
我使用TabLayout作为ViewPager的标签.当我按下某个标签时,我会得到带有奇怪颜色标签的背景.并且独立于TabLayout的EditText背景也在奇怪的视图中.API 19中的结果.在API 22中,所有工作都很完美

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

有片段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 N的多窗口模式中删除paddingTop/ marginTop导航视图.就像Gmail一样.如果您看到下面的图像,我说的是正常的填充,其大小等于导航视图开头的状态栏.
所以基本上在多窗口模式下(见下图)我必须在我的应用程序位于屏幕的第二部分时删除该填充.
不幸的是,你可以从新的api 24获得,isInMultiWindowMode()但是不可能知道你的应用程序在屏幕的哪个部分.
android android-statusbar android-navigationview android-7.0-nougat
我有以下扩展方法。如何引用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) 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)
如何解决此异常?
请告诉我使用startActivity(intent)和setContentView(R.Layout.main)
哪个更优选哪个应该在哪些条件下使用?
我想当我们想要执行我们使用的任何动作时startActivity(intent),只是在我们使用的不同页面中移动setContentView(R.Layout.main)
我想在局域网中进行扫描,以查找链接的设备.我正在IOS中为IPAD开发应用程序我该怎么办?
我有一个分支开发和一个分支前沿.
我在dev上提交了SHA1 id,说4356xyz.我希望它能走在前沿.所以我检查了前沿并做了
git reset --hard 4356xyz
现在,当我这样做时,git log我发现两个分支的历史都变得相同.在我进行重置之前,有没有办法恢复先前的尖端分支历史?
目前,我正在学习科特林并试图创建在所有工作的延伸(中缀)方法号码类型(Byte,Long,Float等)。它应该像 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) android ×6
kotlin ×3
android-view ×1
device ×1
git ×1
github ×1
gradle ×1
ios ×1
java ×1
modulo ×1
network-scan ×1
networking ×1
nine-patch ×1
robolectric ×1