Tag: android support library

DataBinding(库必须使用完全相同的版本规范)

摇篮: buildscript { ext.kotlin_version = ‘1.2.10’ repositories { google() jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.1’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } ========================= ext { support_version = ‘27.0.2’ dagger_version = ‘2.14.1’ } dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) //kotlin implementation “org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version” //support implementation “com.android.support:appcompat-v7:$support_version” implementation ‘com.android.support.constraint:constraint-layout:1.0.2’ //rx implementation ‘io.reactivex.rxjava2:rxjava:2.1.8’ implementation ‘io.reactivex.rxjava2:rxandroid:2.0.1’ //test testImplementation ‘junit:junit:4.12’ androidTestImplementation ‘com.android.support.test:runner:1.0.1’ androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.1’ […]

当tabMode设置为“可滚动”时,TabLayout不填充宽度

我已经将TabLayout (从支持库v22.2.1)添加到我的片段: 问题是,当片段的方向是横向(在片段的初始创建之前或之后), TabLayout与Fragment的宽度不匹配(是的,父对象的宽度也设置为match_parent )。 当屏幕宽度很小(即不是所有的标签可以同时显示): 当屏幕宽度足以显示所有标签时(请参阅右侧的空白处): 如果我将tabMode更改为fixed,则宽度将被填充,但制表符太小。 那里有没有适当的解决方案?

将支持库更新到27.0.0后,我的片段中有多个错误

将支持库从v-26.1.0更新到v-27.0.0之后将碎片中的多个错误更新。 这里是一些这些错误的列表: 错误:智能转换为“捆绑”是不可能的,因为“参数”是一个可以改变的可变属性。 错误:’onCreateView’覆盖任何东西 错误:’onViewCreated’覆盖任何东西 错误:types不匹配:推断types是View? 但是View是预期的 错误:types不匹配:推断types是上下文吗? 但上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但上下文是预期的 从android工作室的模板为空片段。 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (arguments != null) { mParam1 = arguments.getString(ARG_PARAM1) mParam2 = arguments.getString(ARG_PARAM2) } } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_blank, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { […]

从25更新到支持27和SDK 27,现在在Android 4.4上崩溃

我正在更新我的应用程序到Android SDK 27,现在在Android 4.4上崩溃: 10-28 13:03:16.159 2525-2525/? I/dalvikvm: Could not find method android.content.ContentProviderClient.close, referenced from method fr.geobert.efficio.MainActivity.cleanDatabaseIfTestingMode 10-28 13:03:16.169 2525-2525/? E/AndroidRuntime: FATAL EXCEPTION: main Process: fr.geobert.efficio, PID: 2525 java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geobert.efficio/fr.geobert.efficio.MainActivity}: android.view.InflateException: Binary XML file line #0: Error inflating class android.support.v7.widget.Toolbar at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at […]

片段过渡支持25.1.0与Recyclerview

我正在使用片段转换为回收站视图设置动画,使用25.0.1支持库和转换对于推送和弹出目标片段正常工作。 我用来生成交易的代码是: supportFragmentManager.beginTransaction() .replaceAddToBackStack(R.id.content, fragment) .addSharedElement(fragment, commonViews) .commit() 现在我试图更新到支持库的25.1.0版本,并且弹出式动画崩溃,因为转换没有找到原始视图,并且正在崩溃: E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at android.support.v4.app.FragmentTransitionCompat21.setNameOverridesOptimized(FragmentTransitionCompat21.java:339) at android.support.v4.app.FragmentTransition.configureTransitionsOptimized(FragmentTransition.java:232) at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:111) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:822) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:775) at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:178) at App.ui.base.BaseActivity.onBackPressed(BaseActivity.kt:23) … 但是,如果我禁用“优化”,它工作正常。 supportFragmentManager.beginTransaction() .replaceAddToBackStack(R.id.content, fragment) .addSharedElement(fragment, commonViews) .setAllowOptimization(false) .commit() 我做错了什么? 编辑:我用来包装共享元素的扩展: .replaceAddToBackStack fun<T : […]

BottomNavigationView覆盖的RecyclerView

我尝试了谷歌支持库BottomNavigationView与我的片段Framelayout。 这是我的代码 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.bottombarnavigation.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <include layout="@layout/toolbar"/> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <android.support.design.widget.BottomNavigationView android:background="#fcfcfc" android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom|end" app:menu="@menu/bottom_navigation" /> </android.support.design.widget.CoordinatorLayout> 当我在片段内填充我的RecyclerView时,它的内容被BottomNavigationView覆盖。 我不知道为什么会发生这种情况。 我看通过其他人教程,它工作正常。 编辑这里是我的content_main.xml文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.bottombarnavigation.MainActivity" tools:showIn="@layout/activity_main"> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"></FrameLayout> </RelativeLayout>

如何使用Android支持库权限委托?

Android支持库的27.0.0版本引入了类FragmentCompat.PermissionCompatDelegate 。 我想知道它究竟是什么,应该如何使用(阅读文档没有任何例子没有多大帮助)。 我深入了一下,发现了在24.1.0版本中引入的FragmentCompat.OnRequestPermissionsResultCallback,并且还注意到这两个嵌套的接口具有在同一Support Library版本中引入的ActivityCompat变体。 这些接口是否最终允许任何类来管理权限请求和授予结果,而不必像在大多数扩展“BaseActivity”或“BaseFragment”所需的这些库中那样做丑陋的黑客? 如何使用它们? 如果你用代码回答,Kotlin片段是赞赏,但Java的也被接受!

Android支持库27,片段更新?

由于我更新了我的项目到SDK版本27和支持库的gradle插件到版本27.0.0我需要更改我的代码。 26.1.0我可以在我的Fragment ( android.support.v4.app )中使用getContext() (与Kotlin context ),我没有可空性的问题,但是因为我使用Kotlin我有一个版本27.0.0的问题,我所有的context调用都不再工作,我需要一个安全操作员,就像context!!一样context!! ,但是因为我个人认为这是一个忙碌的做法,每次我只是让自己的解决方案功能 override fun getContext() = super.getContext()!! 另一个改变(突然,这就是为什么我问)是onCreateView()和onViewCreated() 。 在onCreateView的inflater不可能是null了,所以我需要改变我的函数签名正确覆盖从onCreateView(inflater: LayoutInflater?…) onCreateView(inflater: LayoutInflater…)和createdView参数相同onViewCreated 。 所以现在我想知道为什么,特别是(对于Kotlin)非常丑陋的getContext()更改,并转向https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html 。 但是等一下,显然他们没有改变呢? 所以现在我的问题是如果我做错了什么,或者如果他们真的改变了,如果是的话,我可能会问他们为什么? 顺便说一下,同样适用于getActivity() ,我认为mHost == null检查被添加,并且getActivity方法甚至是最终的,所以我不能在那里使用我的解决方法,这使得它非常非常难看。 实际上在源文件中的方法看起来是一样的,但26.1.0有Kotlin返回类型的Context! 和27.0.0返回类型的Context? 。

RequiresApi vs TargetApi android注解

RequiresApi和TargetApi什么区别? 在kotlin中的示例: @RequiresApi(api = Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M) class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 注意: FingerprintManager.AuthenticationCallback需要api M 注2:如果我不使用TargetApi lint失败,错误class requires api level 23…

在Java中使用在Kotlin中定义的IntDef错误

我试图在Kotlin中定义一个IntDef接口,然后在Java中使用这些常量。 我能够访问它,但是当我尝试在其上执行一个等号运算符时,出现IDE Lint错误。 虽然,不同的比较运算符(<,>)工作正常。 即使使用“Objects.equal()”的作品,只是不==。 任何人有任何想法呢? 错误:必须是1L,2L中的一个 我的Kotlin班 class RandomClass{ … @IntDef(STATE_1, STATE_2) @Retention(AnnotationRetention.SOURCE) annotation class MyState companion object { const val STATE_1 = 1L const val STATE_2 = 2L } 在发生错误的Java中访问注释 void myFunction(@RandomClass.MyState long state){ if(state == RandomClass.STATE_1){ … } } 我的温度修复这个 void myFunction(@RandomClass.MyState long state){ if(Objects.equal(state, RandomClass.STATE_1)){ … } }