我想为我的应用程序提供2个可选主题.为了做到这一点,我定义了一些属性,如下所示:
<attr format="color" name="item_background" />
Run Code Online (Sandbox Code Playgroud)
然后,我创建了两个主题,如下所示:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这种方法效果很好,允许我轻松地创建和修改几个主题.问题是它似乎只能在Views中使用,而不能在Drawables中使用.
例如,引用布局内View的值可以:
<TextView android:background="?item_background" />
Run Code Online (Sandbox Code Playgroud)
但是在Drawable中做同样的事情并不是:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Run Code Online (Sandbox Code Playgroud)
运行应用程序时出现此错误:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Run Code Online (Sandbox Code Playgroud)
如果不是?item_background我使用硬编码颜色,它可以工作,但这不允许我使用我的主题.我也试过?attr:item_background,但同样的事情发生了.
我怎么能这样做?为什么它在Views中有效但在Drawables中无效?我在文档中的任何地方都找不到这个限制......
在Android中,我在模拟器和某些移动设备中遇到以下错误但在平板电脑中没有:
我无法理解实际上是什么错误?
我搜索了很多教程,但找不到任何解决方案.
请帮我解决这个问题.
注意:在这个应用程序中,我使用了ActionbarSherlock和主题,可能是因为该库或任何其他问题?
我的错误日志是:
09-11 17:52:57.342: E/AndroidRuntime(9935): FATAL EXCEPTION: main
09-11 17:52:57.342: E/AndroidRuntime(9935): android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
09-11 17:52:57.342: E/AndroidRuntime(9935): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
09-11 17:52:57.342: E/AndroidRuntime(9935): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)
09-11 17:52:57.342: …Run Code Online (Sandbox Code Playgroud) android android-emulator android-layout android-theme actionbarsherlock
我有一个登录部分,我使用TextInputLayout作为电子邮件和密码.两者都是一样的.我还使用数据绑定来显示错误消息.
如果它应显示错误提示,则错误发生在API <20上.
@Override
public void showEmailError() {
inputLayoutEmail.setError(sInvalidEmail);
}
Run Code Online (Sandbox Code Playgroud)
xml布局:
<android.support.design.widget.TextInputLayout
android:id="@+id/til_email"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginLeft="@dimen/default_margin_16dp"
android:layout_marginRight="@dimen/default_margin_16dp"
android:layout_marginTop="16dp"
android:layout_below="@id/login_img_logo"
android:layout_centerHorizontal="true"
android:textColorHint="@color/gray"
android:background="@drawable/login_edittext"
android:errorEnabled="@{viewmodel.obEmailErrorVisibility}"
>
<EditText
android:id="@+id/et_login"
android:layout_height="@dimen/login_view_height"
android:layout_width="@dimen/login_view_width"
android:inputType="text"
android:maxLength="50"
android:hint="@string/activity_login_hint_email"
android:text="@={viewmodel.email}"
android:textColor="@color/black"
android:textColorHint="@color/gray"
android:paddingLeft="@dimen/default_margin_16dp"
android:enabled="@{viewmodel.obIsEmailFieldEnabled}"
/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/til_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/default_margin_16dp"
android:layout_marginRight="@dimen/default_margin_16dp"
android:layout_marginTop="@dimen/default_margin_8dp"
android:layout_below="@id/til_email"
android:layout_centerHorizontal="true"
android:textColorHint="@color/gray"
android:background="@drawable/login_edittext"
android:errorEnabled="@{viewmodel.obPassErrorVisibility}"
>
<EditText
android:id="@+id/et_password"
android:layout_width="@dimen/login_view_width"
android:layout_height="@dimen/login_view_height"
android:hint="@string/activity_login_hint_password"
android:maxLength="50"
android:inputType="textPassword"
android:text="@={viewmodel.password}"
android:textColor="@color/black"
android:textColorHint="@color/gray"
android:paddingLeft="@dimen/default_margin_16dp"
android:enabled="@{viewmodel.obIsPassFieldEnabled}"
/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
作为背景我使用 login_edittext.xml
<solid android:color="@color/white" />
<corners
android:radius="@dimen/login_edittext_radius"
/>
Run Code Online (Sandbox Code Playgroud)
我检查了类似的答案,但大多数都与样式有关
我在应用程序的登录页面中使用TextInputLayout UI机制,一切都很好,除了在这个设备上运行4.4.2 android版本的设备我有一个例外.
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include android:id="@+id/loginInfiLogoRL"
layout="@layout/login_infi_logo_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="-3dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"/>
<!--EMAIL-->
<android.support.design.widget.TextInputLayout
android:id="@+id/email_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/loginInfiLogoRL"
android:theme="@style/TextLabel">
<EditText
android:id="@+id/etUserName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_screen_email_hint"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:maxLines="1"
android:nextFocusDown="@+id/etPassword"
android:singleLine="true"
android:textColor="@android:color/white"
android:textColorHighlight="@color/Orange"
android:textColorHint="@android:color/white" />
</android.support.design.widget.TextInputLayout>
<RelativeLayout
android:id="@+id/rlPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_below="@id/email_wrapper">
<!--PASSWORD-->
<android.support.design.widget.TextInputLayout
android:id="@+id/password_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextLabel">
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_screen_password_hint"
android:imeOptions="actionNext"
android:inputType="textPassword"
android:maxLines="1"
android:nextFocusDown="@+id/bSignIn"
android:shadowColor="@color/Orange"
android:singleLine="true"
android:textColor="@android:color/white"
android:textColorHint="@android:color/white" />
</android.support.design.widget.TextInputLayout>
<!--FORGOT-->
<TextView
android:id="@+id/tvForgotPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:paddingBottom="14dp"
android:paddingRight="10dp"
android:text="@string/login_screen_forgot_password_text"
android:textColor="@color/Orange" …Run Code Online (Sandbox Code Playgroud) android colors android-edittext inflate-exception android-textinputlayout