我在Firebase崩溃报告Password toggle button中遇到了一些关于某些真实设备中处于发布模式的应用的错误.问题是堆栈跟踪错误完全与android.support.design代码类似,您将在以下从firebase控制台获取的日志中看到:
异常java.lang.NullPointerException:尝试在空对象引用上调用虚方法'int java.util.ArrayList.size()'
android.graphics.drawable.AnimatedVectorDrawable.isStarted(AnimatedVectorDrawable.java:427)
android.graphics.drawable .AnimatedVectorDrawable.start(AnimatedVectorDrawable.java:440)
android.graphics.drawable.AnimatedStateListDrawable $ AnimatedVectorDrawableTransition.start(AnimatedStateListDrawable.java:339)
android.graphics.drawable.AnimatedStateListDrawable.selectTransition(AnimatedStateListDrawable.java:226)
android.graphics.drawable .AnimatedStateListDrawable.onStateChange(AnimatedStateListDrawable.java:145)
android.graphics.drawable.Drawable.setState(Drawable.java:599)
android.support.v4.graphics.drawable.DrawableWrapperGingerbread.setState(DrawableWrapperGingerbread.java:145)
android.support .v4.graphics.drawable.DrawableWrapperLollipop.setState(DrawableWrapperLollipop.java:95)
android.widget.ImageView.drawableStateChanged(ImageView.java:1115)
android.support.v7.widget.AppCompatImageButton.drawableStateChanged(AppCompatImageButton.java:149)
android.view.View.refreshDrawableState(View.java:16052)
android.support.design.widget.CheckableImageButton.setChecked(CheckableImageButton.java:75 )
android.support.design.widget.TextInputLayout.passwordVisibilityToggleRequested(TextInputLayout.java:1293)
android.support.design.widget.TextInputLayout $ 4.onClick(TextInputLayout.java:1074)
android.view.View.performClick(View.java:4785 )
android.view.View $ PerformClick.run(View.java:19888)
android.os.Handler.handleCallback(Handler.java:739)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper .loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5276)
java.lang.reflect.Method.invoke(Method.java)java.lang.reflect.Method.invoke(Method.java) :372)
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:911)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
之前我一直在跟踪与此小部件相关的一些错误,我的意思是,我发布了与密码切换可见性相关的问题,我发现了一些关于此组件的问题:
我还发现了一些关于它的AOSP问题:
现在,当用户只需按下切换按钮时,我就会收到此错误
它发生在以下真实设备中:
关于TextInputLayout和TextInputEditText的XML及其主题:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextLabel"
app:passwordToggleEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/login_field_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/perfil_field_password"
android:inputType="textPassword"
android:maxLines="1"
android:maxLength="100"
android:imeOptions="actionDone"
android:textColor="@color/colorAccent"
android:textSize="18sp"
android:paddingStart="15dp"
android:paddingEnd="5dp"/> …Run Code Online (Sandbox Code Playgroud) android android-support-library android-support-design android-textinputlayout android-textinputedittext
我在 TextInputLayout 上有一个奇怪的错误。com.google.android.material.textfield.TextInputEditText焦点的提示颜色变为白色。
这就是我设置它的方式:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputEmail"
style="@style/EditText.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="16dp"
app:boxStrokeColor="@color/colorBrand">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/editTextEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/edt_hint_email"
android:inputType="textEmailAddress"
android:textAlignment="viewStart" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
..这是风格:
<style name="EditText.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:minHeight">56dp</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">@font/dubai_regular</item>
<item name="hintEnabled">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
编辑:添加 style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextAppearance.AppCompat.Title" parent="TextAppearance.AppCompat.Large">
<item name="android:textColor">@color/colorTextPrimary</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
<style name="EditText.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:minHeight">56dp</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">@font/dubai_regular</item>
<item name="hintEnabled">true</item>
</style>
<style name="Button" parent="Widget.MaterialComponents.Button">
<item name="cornerRadius">10dp</item>
<item name="backgroundTint">@color/colorAccent</item>
<item name="android:minHeight">56dp</item>
<item name="android:textAllCaps">false</item>
<item name="android:fontFamily">@font/dubai_bold</item>
<item name="android:elevation">0dp</item>
<item …Run Code Online (Sandbox Code Playgroud) layout android kotlin android-textinputlayout android-textinputedittext
我想明白之间的差别textMultiLine,并
textImeMultiLine为选择android:inputType在EditText。但是,我一直无法理解答案。文档说
IME 是一种允许用户输入文本的控件。
但我不明白 texMultiLine 与 textImeMultiLine 有何不同。
android multiline android-edittext android-inputtype android-textinputedittext
我想使用自定义结束图标从材料设计的 TextInputLayout 获取文本。
我试图这样做:
TextInputLayout textInputCustomEndIcon = findViewById(R.id.editText);
final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());
textInputCustomEndIcon
.setEndIconOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (editText.getText() != null) {
String text = editText.getText().toString();
Log.i("MainActivity", "setEndIconOnClickListener:"+ text);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但我得到一个空文本,不是空而是空!!
android material-design android-textinputlayout android-textinputedittext
我有以下布局:
<androidx.coordinatorlayout.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"
>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/side_margin"
android:paddingTop="@dimen/layout_margin_large"
android:paddingEnd="@dimen/side_margin"
android:paddingBottom="@dimen/layout_margin_default">
<!-- Some oother stuff....-->
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_default"
android:text="@string/optional_data" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/brand"
android:layout_marginTop="@dimen/layout_margin_default"
app:startIconDrawable="@drawable/baseline_store_24">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/model"
android:layout_marginTop="@dimen/layout_margin_default"
app:startIconDrawable="@drawable/baseline_directions_car_24">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/build_year"
android:layout_marginTop="@dimen/layout_margin_default"
app:startIconDrawable="@drawable/baseline_event_24">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="date" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/license_plate"
android:layout_marginTop="@dimen/layout_margin_default"
app:startIconDrawable="@drawable/baseline_pin_24">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) android textview android-layout material-design android-textinputedittext
我正在尝试在XML中使用TextInputEditText,并且遇到此错误:
Caused by: android.view.InflateException: Binary XML file line #15:
Error inflating class android.support.design.widget.TextInputEditText
Caused by: java.lang.ClassNotFoundException: Didn't find class
"android.support.design.widget.TextInputEditText" on path:
DexPathList[[zip file "/data/app/thanhnguyen.com.familysharinglocation-
1/base.apk"],nativeLibraryDirectories=
[/data/app/thanhnguyen.com.familysharinglocation-1/lib/arm64,
/system/lib64, /vendor/lib64]]
Run Code Online (Sandbox Code Playgroud)
这是我的xml:
<android.support.design.widget.TextInputLayout
android:id="@+id/fullName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<android.support.design.widget.TextInputEditText
android:hint="@string/fullName"
android:inputType="textCapWords"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
我的依赖:
compile 'com.android.support:design:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
Run Code Online (Sandbox Code Playgroud) 我做了一个登录活动(使用 Android studios 自动登录活动)。这是用于电子邮件视图输入的小部件:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Autocomplete"
android:textColorHint="#fff">
<AutoCompleteTextView
android:id="@+id/email"
android:textColor="#fff"
android:theme="@style/Autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:shadowColor="#fff"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
这是样式:
<style name="Autocomplete">
<item name="colorControlNormal">#fff</item>
<item name="colorControlActivated">#fff</item>
</style>
Run Code Online (Sandbox Code Playgroud)
看起来不错。当单击电子邮件编辑文本时,android 会给我建议的电子邮件,当我单击它时,它会自动填写电子邮件和密码。这很棒。但是,在自动填充发生后,背景颜色会自动更改为淡色。我怎么能阻止这个?
非常感谢。
附上图片:
当您单击建议的电子邮件时,会发生这种情况:
但它应该是这样的:
这是活动:
package com.alarm.reuven.beyoung.SignInActivity;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import …Run Code Online (Sandbox Code Playgroud) 我有以下 TextInputEditText
<com.google.android.material.textfield.TextInputLayout
android:focusableInTouchMode="true"
android:id="@+id/from_textinput"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif"
android:hint="@string/from"
android:textColor="@color/colorDarkGrey"
android:textColorHint="@color/colorDarkGrey"
android:textSize="12sp"
android:textStyle="normal"
android:visibility="gone"
app:boxCornerRadiusBottomEnd="5dp"
app:boxCornerRadiusBottomStart="5dp"
app:boxCornerRadiusTopEnd="5dp"
app:boxCornerRadiusTopStart="5dp"
app:boxStrokeColor="@color/colorPrimary"
app:boxStrokeWidth="3dp"
app:layout_constraintEnd_toStartOf="@+id/to_textinput"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/doNotDisturbCheckBox">
<com.google.android.material.textfield.TextInputEditText
android:onClick="@{() -> viewModel.openFromTimePickerClicked()}"
android:focusableInTouchMode="true"
android:id="@+id/from_textedit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:editable="false"
android:text="@{viewModel.doNotDisturbFrom}"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
第一次触摸没有触发onClick的问题,只有在我第二次按下时才会调用
第一次点击使其聚焦第一次点击触发 onClick
谁能告诉我如何从第一次触发点击
我有一个TextInputLayout需要大量重用的自定义样式,因此我尝试将其转换为自定义视图。
这是要重用的 xml:
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayoutAppearance"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
TextInputLayoutAppearance是我在中创建的自定义样式styles.xml
这是我的自定义视图的类:
class OutlinedTextInput @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextInputLayout(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.view_outlined_textinput, this, true)
}
}
Run Code Online (Sandbox Code Playgroud)
这是view_outlined_textinput我根据上面的原始 xml 改编的,用于自定义视图:
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:parentTag="com.google.android.material.textfield.TextInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</merge>
Run Code Online (Sandbox Code Playgroud)
这里有两件事需要注意:
布局使用合并标签来避免视图层次结构中的冗余视图。
应用自定义样式至关重要。使用 style= 语法在原始 xml 中应用样式。但是,由于合并标签用于自定义视图,因此无法以这种方式完成。
我尝试按如下方式设置样式,但没有成功:
class OutlinedTextInput @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = …Run Code Online (Sandbox Code Playgroud) android-custom-view android-layout android-styles android-textinputlayout android-textinputedittext
我正在使用最新版本的android材料设计库(1.2.0-alpha05)。我在 TextInputLayout 中添加了app:suffixText="PlaceHolder"。我希望默认显示suffixText ,但目前,仅当 TextInputLayout 获得焦点时它才可见。当 TextInputLayout 失去焦点时,我看不到 suffixText。这是我的代码-:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:suffixText="PlaceHolder"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="hint">
<com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>Run Code Online (Sandbox Code Playgroud)
请告诉我,如何默认显示后缀文本。
android android-layout material-design android-textinputlayout android-textinputedittext