【问题标题】:EditText background not workingEditText背景不起作用
【发布时间】:2013-07-22 13:23:41
【问题描述】:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="0px"
        android:layout_height="0px"
        android:focusable="true"
        android:focusableInTouchMode="true" />

    <AutoCompleteTextView
        android:id="@+id/autoComplete"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:background="@drawable/black_rounded_borders" />

</RelativeLayout>

我添加了无用的 LinearLayout 只是为了避免最初关注 Activity 启动时的 AutoCompleteTextView

drawable/black_rounded_borders.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#FFFFFFFF" />

    <stroke
        android:width="2dp"
        android:color="@color/selector_black_border" />


    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />

</shape>

color/selector_black_border.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_focused="true" android:color="#FF269ff5"/>
    <item android:state_pressed="true" android:color="#FF269ff5"/>
    <item android:state_selected="true" android:color="#FF269ff5"/>
    <item android:state_focused="false" android:color="#FF000000"/>
    <item android:state_pressed="false" android:color="#FF000000"/>
    <item android:state_selected="false" android:color="#FF000000"/>

</selector>

活动

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    autoComplete = (AutoCompleteTextView) findViewById(R.id.autoComplete);
    Log.d("hasFocus", autoComplete.hasFocus() + "");
    Log.d("isSelected", autoComplete.isSelected() + "");
    Log.d("isPressed", autoComplete.isPressed() + "");
    //All the above are false
}

尽管所有与蓝色(#FF269ff5) 颜色相关的状态都是错误的。一世 仍然得到蓝色边框。另外,如果我更改顺序 color/selector_black_border.xml 文件中的状态,就像所有 false 首先是真的,然后我得到黑色边框。它就像只有 第一种颜色有效。

我错过了什么?

谢谢。

【问题讨论】:

  • 您是否尝试将android:focusable="true" android:focusableInTouchMode="true" 添加到EditText 的父级(RelativeLayout)
  • 是的。这样我就可以避免这个额外的LinearLayout。但最终的结果是一样的。
  • 如果将&lt;item android:state_focused="false" android:color="#FF000000"/&gt; &lt;item android:state_pressed="false" android:color="#FF000000"/&gt; &lt;item android:state_selected="false" android:color="#FF000000"/&gt; 替换为&lt;item android:color="#FF000000"/&gt; 是否有效?
  • 好的。虽然默认状态低于真实状态,但它在开始时显示为黑色,一直工作到这里。但即使在对焦、打字后也不会变为蓝色......
  • 你把它作为最后一个声明了吗?

标签: android selector


【解决方案1】:

我不能把这个放到评论中,因为它太大了,但是我找到了这个here的解释,它说:

ColorStateList 不能作为 XML 定义中 &lt;solid&gt; 的属性传递,或者实际上是 &lt;shape&gt; 的任何属性。该属性作为 Color 资源从 XML 中膨胀出来,然后传递给 Drawable 的 setColor() 方法,该方法只接受一个 ARGB 值。

只有一种类型的 Drawable 实例被设计用来包含和呈现基于状态的多个项目,那就是 StateListDrawable,这就是你对 &lt;selector&gt; 进行膨胀时得到的。所有其他 Drawable 实例都只是该集合的成员或独立绘制。

还要注意,膨胀的&lt;shape&gt; 项目实际上是GradientDrawable,而不是ShapeDrawable。如果您查看 GradientDrawable in the source 的 inflate() 方法,您可以获得有关如何使用每个属性的所有详细信息。

学分转到@Devunwired。

但是,基于此,您可以创建不同的形状(每次都是一个矩形),每个形状都具有以下属性。在drawable/black_rounded_borders.xml 中使用下面的代码,看看它是否按预期工作:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <selector xmlns:android="http://schemas.android.com/apk/res/android" >
            <item android:state_pressed="true">
                <shape android:shape="rectangle" >
                    <solid android:color="#FFFFFFFF" />

                    <stroke
                        android:width="2dp"
                        android:color="#FF269ff5" />

                    <corners
                        android:bottomLeftRadius="5dp"
                        android:bottomRightRadius="5dp"
                        android:topLeftRadius="5dp"
                        android:topRightRadius="5dp" />
                </shape>
            </item>
            <item android:state_focused="true">
                <shape android:shape="rectangle" >
                    <solid android:color="#FFFFFFFF" />

                    <stroke
                        android:width="2dp"
                        android:color="#FF269ff5" />

                    <corners
                        android:bottomLeftRadius="5dp"
                        android:bottomRightRadius="5dp"
                        android:topLeftRadius="5dp"
                        android:topRightRadius="5dp" />
                </shape>
            </item>
            <item android:state_selected="true">
                <shape android:shape="rectangle" >
                    <solid android:color="#FFFFFFFF" />

                    <stroke
                        android:width="2dp"
                        android:color="#FF269ff5" />

                    <corners
                        android:bottomLeftRadius="5dp"
                        android:bottomRightRadius="5dp"
                        android:topLeftRadius="5dp"
                        android:topRightRadius="5dp" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle" >
                    <solid android:color="#FFFFFFFF" />

                    <stroke
                        android:width="1dp"
                        android:color="#FF000000" />

                    <corners
                        android:bottomLeftRadius="5dp"
                        android:bottomRightRadius="5dp"
                        android:topLeftRadius="5dp"
                        android:topRightRadius="5dp" />
                </shape>
            </item>
        </selector>
    </item>

</layer-list>

抱歉,帖子太长了,我不知道它是否有效,但我找不到其他发布方式。

【讨论】:

  • 刚刚对您的代码进行了一些更正。非常感谢。
  • Wellcome :) 你可以用这些更正来编辑我的帖子,我什至会建议! :) 谢谢
  • 其实我编辑的,不知道去哪了。会再做一次,接受它。
猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 2013-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2011-08-27
相关资源
最近更新 更多