在不更改应用程序主题的情况下使用 TextInputLayout 布局
Using TextInputLayout layout without changing Application Theme
当我在应用程序中使用带有 Out AppCompat 主题的 textInputLayout 时,我无法扩充布局并且我的应用程序崩溃了。当我尝试单独为 TextInputLayout 设置 Appcompat 主题时,它在 API 高于 21 的设备上工作正常,但它仍然在棒棒糖之前的设备上崩溃。有没有办法在 PreLollipop 设备上使用 TextInputLayout 而无需为整个应用程序使用 AppCompat 主题?
TextInputLayout 需要从设计主题派生的主题。首先你需要得到这样一个主题的上下文。
val themedContext = ContextThemeWrapper(context, R.style.Theme_Design_Light)
这里context
是一个activity。现在你有两个选择:
1) 从 XML
膨胀输入布局
val inflater = LayoutInflater.from(themedContext)
inflater.inflate(R.layout.my_input_layout, inputParent, true)
// Find the input layout and edit text by ID and work with them.
inputParent
是一个视图组,输入布局将附加在 inflation 之后。
2) 在Java
中创建输入布局
val inputLayout = TextInputLayout(themedContext)
val editText = EditText(inputLayout.context)
inputLayout.addView(editText)
inputParent.addView(inputLayout)
我推荐选项 1,因为大多数人在定义视图层次结构时都习惯这样做。它可能会帮助您避免意外结果。
或者只使用 AppCompat 主题和 AppCompatActivity,因为为什么不呢。
当我在应用程序中使用带有 Out AppCompat 主题的 textInputLayout 时,我无法扩充布局并且我的应用程序崩溃了。当我尝试单独为 TextInputLayout 设置 Appcompat 主题时,它在 API 高于 21 的设备上工作正常,但它仍然在棒棒糖之前的设备上崩溃。有没有办法在 PreLollipop 设备上使用 TextInputLayout 而无需为整个应用程序使用 AppCompat 主题?
TextInputLayout 需要从设计主题派生的主题。首先你需要得到这样一个主题的上下文。
val themedContext = ContextThemeWrapper(context, R.style.Theme_Design_Light)
这里context
是一个activity。现在你有两个选择:
1) 从 XML
膨胀输入布局val inflater = LayoutInflater.from(themedContext)
inflater.inflate(R.layout.my_input_layout, inputParent, true)
// Find the input layout and edit text by ID and work with them.
inputParent
是一个视图组,输入布局将附加在 inflation 之后。
2) 在Java
中创建输入布局val inputLayout = TextInputLayout(themedContext)
val editText = EditText(inputLayout.context)
inputLayout.addView(editText)
inputParent.addView(inputLayout)
我推荐选项 1,因为大多数人在定义视图层次结构时都习惯这样做。它可能会帮助您避免意外结果。
或者只使用 AppCompat 主题和 AppCompatActivity,因为为什么不呢。