0

我使用 TextInputLayout 作为容器来保存国家代码和电话号码。我有这个容器的自定义样式。

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/signin_inputlayout_mobile"
        style="@style/UserAuthField">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Spinner
                android:layout_width="0dp"
                android:layout_weight="22"
                android:layout_height="wrap_content"
                style="@style/region_spinner"
                android:id="@+id/spinner"
                android:prompt="@string/Auth_DialCode">
            </Spinner>

            <EditText
                android:layout_width="0dp"
                android:layout_weight="78"
                style="@style/UserAuthField"
                android:inputType="number"
                android:id="@+id/usr_mobile_uname_login"
                android:hint="@string/Auth_Phone"/>

        </LinearLayout></android.support.design.widget.TextInputLayout>

以下是样式:

<style name="UserAuthField">
    <item name="android:background">@drawable/etborder</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#333333</item>
    <item name="android:textColorHint">#757575</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:paddingTop">8dp</item>
</style>

这是图层列表:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="1dp" android:left="-3dp" android:right="-3dp" android:top="-3dp">
    <shape android:shape="rectangle">
        <stroke android:width="1dp" android:color="#00FFFFFF"/>
    </shape>
</item>
</layer-list>

当我尝试对此设置错误时,我收到以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundTintList(android.content.res.ColorStateList)' on a null object reference

仅供参考,同样的策略早先奏效了,但在这种情况下,似乎有些失误。想不通为什么?!

4

1 回答 1

0

我犯的一个大错误是在布局的根元素的定义中:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ripple="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
**tools:context="com.viven.android.kahaniya.ActivitySetup"**
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

正如我从这个答案中了解到的那样,要使样式起作用,必须使用本地上下文而不是应用程序级上下文来定义它们。

现在,我仍然不完全明白这意味着什么。我会阅读更多内容,但如果您有其他信息,请分享。

于 2016-06-27T14:31:58.310 回答