1
<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>

アクティビティが起動されたときに AutoCompleteTextView への最初のフォーカスを避けるために、役に立たない LinearLayout を追加しました

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、次に true のように、黒い境界線が表示されます。最初の色だけが機能するようです。

私は何が欠けていますか?

ありがとうございました。

4

1 に答える 1

2

大きすぎるため、これをコメントに入れることはできませんが、これに関する説明を見つけましたhere、次のように述べています。

を XML 定義のColorStateList属性として渡すことはできません。この属性は、XML から Color リソースとしてインフレートされ、単一の ARGB 値のみを受け取る Drawable のメソッドに渡されます。<solid><shape>setColor()

状態に基づいて複数のアイテムを格納および表示するように設計された Drawable インスタンスのタイプは 1 つだけStateListDrawableです<selector>。他のすべての Drawable インスタンスは、単にこのコレクションのメンバーになるか、スタンドアロンで描画されることを意図しています。

また、膨張した<shape>アイテムは実際にはGradientDrawableではなく であることに注意してくださいShapeDrawablesourceinflate()のメソッドを確認すると、各属性がどのように使用されるかについて必要なすべての詳細を取得できます。GradientDrawable

クレジットは @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>

長い投稿で申し訳ありませんが、それが機能しているかどうかはわかりませんが、これを投稿する別の方法が見つかりませんでした.

于 2013-07-22T14:32:54.717 に答える