0

简单的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context="com.infinitebounds.myapplication.Main2Activity">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/tip"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:id="@+id/et"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint" />
    </android.support.design.widget.TextInputLayout>
</LinearLayout>

textInputLayout如果活动是第一次初始化,我将禁用:

class Main2Activity : AppCompatActivity() {

    lateinit var tip: TextInputLayout
    lateinit var et: EditText

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        tip = findViewById(R.id.tip) as TextInputLayout
        et = findViewById(R.id.et) as EditText

        if (savedInstanceState == null) tip.isEnabled = false
    }
}

我已经检查了“不要保留活动”选项。

所以最初当活动启动时,TextInputLayout被禁用。当我按 home 并返回时,它再次重新启用。

所以我的问题是:

  1. 这是预期的行为吗?
  2. 重新创建时如何保持TextInputLayout禁用状态?

编辑:

这似乎也发生在EditText

4

1 回答 1

0

这是预期的行为吗?

是的,它是(假设“不保留活动”被选中)。

第一次启动应用程序时savedInstanceState为 null - 您的if检查通过并将TextInputLayout状态设置为禁用。

只要您按下主页按钮并返回,onCreate()就会被调用,但这次savedInstanceState不为空 - 您的检查没有通过if

重新创建时如何保持 TextInputLayout 禁用?

完全摆脱if检查,这是没有用的。tip.isEnabled = false直接在 内执行onCreate(),或在xml:内执行android:enabled="false"

于 2017-07-04T09:13:05.700 回答