小编Nic*_*zzi的帖子

约束布局与滚动视图高度不匹配

我在约束布局中放入了一个图像和一个不应滚动的标题布局,以及一个滚动视图,其中包含另一个带有一些视图的约束布局。当我尝试调整滚动视图内的约束布局大小时,宽度会相应变化,但高度不会变化。我希望约束布局高度与其滚动视图的高度相匹配,因为我打算为注册表添加更多文本框和按钮。现在两个盒子被挤压并且约束布局高度没有增加。

<?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 
    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="@color/MistyRose"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingTop="16dp"
    android:paddingRight="16dp"
    android:paddingBottom="16dp">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="203dp"
        android:layout_height="95dp"

        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:src="@drawable/logo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="70dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="Register"
        android:textColor="@color/Black"
        android:textSize="40dp"
        android:textStyle="italic"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2"
        app:layout_constraintVertical_bias="0.016" />

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="400dp"
        android:layout_height="250dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.6"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.0">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal">

            <EditText
                android:layout_width="350dp"
                android:layout_height="46dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:background="@drawable/edittext"
                android:hint="Name"
                android:inputType="text"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                tools:layout_editor_absoluteY="12dp" …
Run Code Online (Sandbox Code Playgroud)

android scrollview android-constraintlayout

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

BottomNavigationView 菜单项标题在非活动状态时不显示 [XML]

现在:https : //i.stack.imgur.com/lgdaa.png

我有一个底部导航栏。案例:底部导航栏项菜单的文本未显示在非活动状态时显示。文本仅在选项卡处于活动状态时显示。即使选项卡菜单处于非活动状态,应该显示什么图标标题?

<android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="?android:attr/windowBackground"
            android:theme="@style/BottomNavigationTheme"
            app:menu="@menu/menu"/>
Run Code Online (Sandbox Code Playgroud)

和样式:

    <style name="BottomNavigationTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/tabActive</item>
        <item name="android:textColorSecondary">@color/tabInactive</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

xml android

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

Hilt - CoroutineDispatcher 上缺少绑定

我正在使用Hilt作为依赖注入管理器重构我的应用程序。\n我有一个构造函数可注入类,构造函数中有两个参数。参数之一是CoroutineDispatcher.

\n
class SubscriptionsLocalDataSource @Inject constructor(\n    private val subscriptionsDao: SubscriptionsDao,\n    private val dispatcher: CoroutineDispatcher = Dispatchers.IO\n) : SubscriptionsDataSource {\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试构建应用程序时,出现缺少绑定错误,如下所示:

\n
\n

错误:[Dagger/MissingBinding] kotlinx.coroutines.CoroutineDispatcher 如果没有 @Provides 注释的方法,则无法提供。\n公共抽象静态类 ApplicationC 实现 ApplicationComponent,\n^\nkotlinx.coroutines.CoroutineDispatcher 被注入到\ncom.anagramma.babacodashboard .data.subscriptions.local.SubscriptionsLocalDataSource(\xe2\x80\xa6, 调度程序)\ncom.anagramma.babacodashboard.data.subscriptions.local.SubscriptionsLocalDataSource 被注入\ncom.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl(localDataSource, \xe2\x80\xa6)\ncom.anagramma.babacodashboard.data.subscriptions.SubscriptionsRepositoryImpl 被注入\ncom.anagramma.babacodashboard.di.SubscriptionsModule.bindSubscriptionsRepository(subscriptionsRepositoryImpl)\njavax.inject.Provider<com.anagramma.babacodashboard。 data.subscriptions.SubscriptionsRepository> 注入于\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory(repository, \xe2\x80\xa6)\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_AssistedFactory 注入于\ncom.anagramma.babacodashboard.ui.orders.subscriptions.SubscriptionsViewModel_HiltModule.bind(factory)\njava.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>> 注入于\nandroidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule.provideFactory(\xe2\x80\xa6, viewModelFactories)\n@dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory java. util.Set<androidx.lifecycle.ViewModelProvider.Factory> 请求于\ndagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.ActivityEntryPoint.getActivityViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC \xe2\x86\x92 com .anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC]\n以下其他入口点也依赖于它:\ndagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.FragmentEntryPoint。 getFragmentViewModelFactory() [com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ApplicationC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityRetainedC \xe2\x86\x92 com.anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.ActivityC \xe2\x86\x92 com .anagramma.babacodashboard.BabacoDashboardApplication_HiltComponents.FragmentC]

\n
\n

我是否缺少 CoroutineDispatcher 上的一些注释?

\n

android dependency-injection kotlin dagger-hilt

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

Kotlin Android - 创建使用上下文而没有内存泄漏的单例

我正在尝试实现以下单例模式: SingletonClass.getInstance(context).callMethod()

虽然有很多教程可以解释如何在Kotlin中制作单例,但它们都没有解决context在静态字段中持有一个会导致Android内存泄漏的事实.

如何在不创建内存泄漏的情况下创建上述模式?

更新:

这是我对CommonsWare解决方案#2的实现.我用过Koin.

单身人士课程:

class  NetworkUtils(val context: Context) {

}
Run Code Online (Sandbox Code Playgroud)

申请类别:

class MyApplication : Application() {

    val appModule = module {
        single { NetworkUtils(androidContext()) }
    }

    override fun onCreate() {
        super.onCreate()
        startKoin(this, listOf(appModule))
    }
}
Run Code Online (Sandbox Code Playgroud)

活动类:

class MainActivity : AppCompatActivity() {

    val networkUtils : NetworkUtils by inject()

}
Run Code Online (Sandbox Code Playgroud)

singleton android android-context kotlin

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

@Parcelize 和枚举类 - 重载解析歧义

我需要澄清一下@ParcelizeKotlin 中的注释。我已经声明了这个枚举类:

 @Parcelize
 enum class Source : Parcelable {
    LIST, MAP
 }
Run Code Online (Sandbox Code Playgroud)

该类被注释@Parcelize以实现 Parcelable 接口并且它工作正常,但是当我尝试以意图传递 Parceled 类时,我必须强制重新转换为 Parcelable,否则编译器会给我一个“重载解析歧义” . 错误:

重载解析歧义。所有这些功能都匹配。@RecentlyNonNull public open fun putExtra(name: String!, value: Parcelable!): Intent!定义在 android.content.Intent @RecentlyNonNull public open fun putExtra(name: String!, value: Serializable!): Intent! 在 android.content.Intent 中定义

val intent = Intent(context, DestinationActivity::class.java)
intent.putExtra(Constants.RETAIL_DETAILS_CLICK_SOURCE_ID, StoreDetailsClicked.Source
                    .MAP as Parcelable)
Run Code Online (Sandbox Code Playgroud)

为什么编译器给我这个错误?

enums android parcel parcelable kotlin

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

导航组件 - 模拟导航控制器图

我正在使用导航组件,并且正在尝试Fragment使用仪器测试来测试我的组件。该片段具有onViewCreated由扩展函数在方法中初始化的自定义工具栏。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    tbBlack.init()
}


fun androidx.appcompat.widget.Toolbar.init(
    menuId: Int? = null
) {
    title = ""
    menuId?.let {
        inflateMenu(it)
    }

    findNavController().let {
        it.graph.let { graph ->
            val configuration = AppBarConfiguration(graph)
            setupWithNavController(it, configuration)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的仪器测试中的场景初始化期间,由于null导航控制器上的图形导致测试崩溃。

导航控制器在测试中被模拟,以及如下图:

@RunWith(AndroidJUnit4::class)
class LoginFragmentTest {
    @Test
    fun testEmptyFields() {
        val mockNavController = mock(NavController::class.java)
        val mockGraph = mock(NavGraph::class.java)
        mockNavController.graph = mockGraph

        val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) {
            LoginFragment().also { fragment -> …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-espresso android-architecture-navigation

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

在 Kotlin 中将“Yes”或“No”字符串转换为布尔值

我想知道是否有更有效的方法在 kotlin 中将字符串转换"yes/no"为布尔值。我的解决方案是在 String 类上定义一个扩展函数,并在 when 表达式中执行 yes no che:

fun String.toBoolean(): Boolean {
    when (this.toUpperCase()) {
        "YES" -> return true
        "NO" -> return false
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)

还有其他可能的方法吗?

kotlin

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

Kotlin父子类初始化顺序

我有一个视图SubEpoxyRecyclerView,它是EpoxyRecyclerView我的父类的子类。当初始化此视图时,超类调用构造函数主体中的EpoxyRecyclerView方法。setItemSpacingPx(Int)

当调用这个方法时,我的类变量都没有被初始化!应用程序在线崩溃,itemDecorator.pxBetweenItems指出该 itemDecorator值为空,这是不可能的

子类(科特林):

class SubEpoxyRecyclerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
    : EpoxyRecyclerView(context, attrs, defStyleAttr) {

    private val itemDecorator: Decor = Decor()
    private val someInt: Int = 5
    private var someBoolean: Boolean = true

    override fun setItemSpacingPx(spacingPx: Int) {
        // Called from superclass. Debug: itemDecorator is null, 
        // someInt is 0, someBoolean is false

        removeItemDecoration(itemDecorator)
        itemDecorator.pxBetweenItems = spacingPx

        if (spacingPx > 0) {
            addItemDecoration(itemDecorator) …
Run Code Online (Sandbox Code Playgroud)

java android android-view kotlin

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

运算符重载 Kotlin

我是 kotlin 的新手,我正在为我定义的自定义类处理运算符重载。该类称为“有理数”,表示一个有理数,例如 117/1098。类定义如下,我重载了一堆运算符,如加号、减号、时间等。但是我不确定我必须做什么来重载“in”运算符。

这是我的课:

data class Rational(val rational: String) {
    private val numerator: BigInteger
    private val denominator: BigInteger

    init {
        val splitted = rational.split("/")
        numerator = splitted[0].toBigInteger()
        denominator = when (splitted[1]) {
            "0" -> throw Exception("not allowed")
            else -> splitted[1].toBigInteger()
        }
    }

    operator fun plus(number: Rational): Rational {
        val gcm = denominator * number.denominator
        val numerator = (gcm / denominator) * numerator + (gcm / number.denominator) * number.numerator
        return Rational("$numerator/$gcm")
    }

    operator fun minus(number: Rational): Rational {
        val gcm …
Run Code Online (Sandbox Code Playgroud)

operator-keyword kotlin

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

Kotlin 三元运算符

如何将以下代码从 Java 转换为 Kotlin?

Boolean mBoolean = false
view.setVisibility(mBoolean ? View.VISIBLE : View.GONE);
Run Code Online (Sandbox Code Playgroud)

syntax android equivalent kotlin

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