14

Android 2.3 用の独自の検索ビューを作成しています。

私は持っている。

  • LinearLayout(横)
  • AutoCompleteTextView
  • ImageButton

に ボタンと を追加しましAutoCompleteTextViewLinearLayout

下の画像のように角の丸みを自分でコントロールしたいです。

ここに画像の説明を入力

このドローアブルを ImageButton に設定しました

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
 <item android:state_pressed="true" >
    <shape>
        <solid
            android:color="#27AFE0" />
        <stroke
            android:width="0.5dp"
            android:color="#000000" />
        <corners
            android:topRightRadius="10dp" android:bottomRightRadius="10dp"
android:topLeftRadius="0.1dp"
            android:bottomLeftRadius="0.1dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>
<item>
    <shape>
        <solid android:color="#D3DBDE"/>
        <stroke
            android:width="0.5dp"
            android:color="#000000" />
        <corners
            android:topRightRadius="10dp" android:bottomRightRadius="10dp"
android:topLeftRadius="0.1dp"
            android:bottomLeftRadius="0.1dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

AutoCompleteText に描画可能

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#D3DBDE"/>
        <stroke android:width="0.5dp" android:color="#000000"/>
        <corners android:topLeftRadius="10dp"
            android:bottomLeftRadius="10dp"
            android:topRightRadius="0.1dp"
            android:bottomRightRadius="0.1dp"/>
    </shape>
</item>

しかし、これをAndroid 2.3で実行すると、これが出力になります(エミュレータとリアルデバイス)

ここに画像の説明を入力

Android 4.0 でも実行すると。それは正常に動作します。

ここに画像の説明を入力

質問は、私のコードで何が間違っているのですか? または、Android 2.3 にバグがありますか?

4

2 に答える 2

26

さて、これが私をも怒らせた取引です。これには2つのことがあります。

ImageButtonセレクターでは、各コーナータグで右コーナーの属性を2回コピーしているように見えました。

2つ目は、バージョン3.0までのAndroidのバグです。コーナーを個別に指定すると、左下と右下のコーナーが反転します。

http://code.google.com/p/android/issues/detail?id=9161

値を次元に抽出し、2つの異なるファイルに入れました。

res / values/corners.xml-逆にしたもの

res / values-v12/corners.xml-正常な値が含まれています。

于 2012-09-20T04:07:58.473 に答える
1

Android の以前のバージョン (ICS 4.0 より前) にはバグがあり、'Shape' クラスの 'corners' 属性が正しく実装されていません。したがって、すべてのバージョンで正しい種類のコーナーを取得するには、ターゲット バージョンをチェックする条件を記述する必要があり、それに応じて正しい背景を設定できます。このような方法で問題が解決します-

/** * Shape クラスのコーナー要素を使用した Pre ICS バージョンのバグの処理 * */

private void getPreICSButtonBackground() {
    if(Build.VERSION.SDK_INT >= 4.0){
        leftButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_left));
        rightButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_right));
    }
}

「R.drawable.btn_rounded_left」のコーナーは次のように実装されています

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

以前のバージョンで実行されている場合は、コーナーを持つ背景を次のように設定します

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

右側のボタンについても同様に行います。これで問題が解決することを願っています

于 2012-10-18T10:30:17.353 に答える