デザインサポートライブラリ から新しいAndroid.support.design.widget.TextInputLayout
ビューを使用する非常にシンプルなレイアウトがあります
<Android.support.design.widget.TextInputLayout
Android:id="@+id/til"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/textDialog"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:hint="First Name"/>
</Android.support.design.widget.TextInputLayout>
膨らませると例外が発生します:
Caused by: Java.lang.RuntimeException: Failed to resolve attribute at index 18
at Android.content.res.TypedArray.getColor(TypedArray.Java:401)
at Android.support.design.widget.CollapsingTextHelper.setCollapsedTextAppearance(CollapsingTextHelper.Java:166)
at Android.support.design.widget.TextInputLayout.<init>(TextInputLayout.Java:106)
at Java.lang.reflect.Constructor.newInstance(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:288)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:607)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:743)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:365)
at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:381)
at Android.app.Activity.setContentView(Activity.Java:2144)
at com.example.trybindinglib.MainActivity.onCreate(MainActivity.Java:24)
at Android.app.Activity.performCreate(Activity.Java:5933)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2298)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2407)
at Android.app.ActivityThread.access$800(ActivityThread.Java:149)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1324)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:211)
at Android.app.ActivityThread.main(ActivityThread.Java:5321)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1016)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:811)
デザインサポートライブラリを追加しましたか?依存関係を追加します。
compile 'com.Android.support:design:22.2.0'
build.gradleに
ベースアプリケーションテーマとしてTheme.AppCompat
を使用している場合は、その中でtextColorError
を定義します。 TextInputLayoutは、エラー状態で使用する必要があります。それ以外の場合は、上記のようにクラッシュログが表示されます。
例:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="textColorError"> @color/design_textinput_error_color_light </item>
</style>
@color/design_textinput_error_color_light
の場合はAppCompat.Light
、@color/design_textinput_error_color_dark
の場合はAppCompat.Dark
です。
アプリのテーマがAppCompatのテーマを拡張していることを確認してください。
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat">
<!-- Customize your theme here. -->
</style>
Android Studioで生成された生のアプリケーションでも同じ問題が発生しました。
最初に次の依存関係をbuild.gradleコンパイルに追加することで解決しました'com.Android.support:appcompat-v7:22.2.0'
次に、Alekseyの提案に従って、テーマベースを@ style/Theme.AppCompatに変更する必要がありました。ここで、appcompatライブラリに同じ名前(AppTheme)のテーマがあり、ASが2つの間で混乱しているように見えるため、ベーステーマの名前を変更する必要があることに注意してください...
お役に立てれば!
getColorがクラッシュします。次の2つのことを試すことができます。
1. EditTextを使用する代わりに、Android.support.v7.widget.AppCompatEditTextを使用します。例えば:
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:errorEnabled="true">
<Android.support.v7.widget.AppCompatEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="First Name"
Android:inputType="textPersonName"
Android:singleLine="true" />
</Android.support.design.widget.TextInputLayout>
2.それでも問題が解決しない場合は、問題が発生する可能性がありますが、入力フィールドを選択するとヒントの色が削除されます。追加:
app:hintTextAppearance="@Android:style/TextAppearance.Small"
textInputLayoutに。
XMLが次のようになっていることを確認してください。
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/search"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="search" />
</Android.support.design.widget.TextInputLayout>
完全な例:
http://hmkcode.com/Android-textinputlayout/
ThemeStyleの変更は必要ありません