13

Je fais ma propre recherche de vue pour Android 2.3.Quelque chose ne va pas dans Corner radius Android

J'ai.

  • LinearLayout (horizontale)
  • AutoCompleteTextView
  • ImageButton

I ajouté le bouton et AutoCompleteTextView à LinearLayout.

Je veux mettre un rayon de coin dans mon propre contrôle comme l'image ci-dessous.

enter image description here

Je mis cette drawable à 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> 

drawable à 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> 

Mais quand je lance cela dans Android 2.3 est la sortie (Emulator et périphérique réel)

enter image description here

Si je lance aussi dans Android 4.0. Ça fonctionne bien.

enter image description here

est question, ce qui ne va pas dans mon code? Ou il y a un bug dans Android 2.3?

+0

Les coins dessi- blables ImageButton ont les valeurs topRightRadius et bottomRightRadius définies deux fois. Est-ce une faute de frappe? Et à quoi sert une fraction de dp? – Rajesh

+0

@Rajesh Oui, je suis désolé. Vous verrez pourquoi j'ai utilisé 0.1dp sur ce lien http://stackoverflow.com/questions/3056232/how-to-make-a-shape-with-left-top-round-rounded-corner-and-left-bottom -rounded-c –

Répondre

26

Ok, donc voici l'affaire qui m'a également cochée. Il y a 2 choses avec ça.

Dans votre sélecteur ImageButton, vous avez semblé copier deux fois les attributs des coins droits dans chaque repère de coin.

Le second est un bug dans Android jusqu'à la version 3.0. Lorsque vous spécifiez les coins séparément, les coins inférieurs gauche et droit sont inversés.

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

J'ai extrait les valeurs vers dimens et les mettre dans deux fichiers différents,

res/valeurs/corners.xml - avec la substance inversée

res/valeurs v12 /corners.xml - avec les valeurs saines en eux.

+0

Donc, à partir de la 3.1, le problème est résolu? –

+0

De l'API 12 et c'est corrigé. Whoops a écrit la mauvaise version. Mais oui –

+0

l'a-t-il réparé? –

1

Il existe un bogue dans les versions antérieures (antérieures à ICS, c'est-à-dire 4.0) d'android, où elles ont incorrectement implémenté l'attribut 'coins' de la classe 'Shape'. Donc, pour obtenir le bon type de coins sur toutes les versions, vous devrez écrire une condition qui vérifie la version cible et en conséquence vous pouvez définir l'arrière-plan correct.Une méthode quelque chose comme cela va résoudre votre problème -

/** * manipulation du bug dans les versions pré ICS avec un élément de coin de forme classe * */

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)); 
    } 
} 

Où dans « R.drawable. coins « btn_rounded_left sont mis en œuvre comme

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

et si elle est en cours d'exécution sur les versions antérieures, puis définissez l'arrière-plan ayant des coins comme

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

De même faire pour le côté droit Button. Espérons que cela résoudra votre problème.

Questions connexes