13

Tworzę własny widok wyszukiwania dla systemu Android 2.3.Coś jest nie tak w promieniu Corner Android

Mam.

  • LinearLayout (poziomej)
  • AutoCompleteTextView
  • ImageButton

I dodaje przycisk i AutoCompleteTextView do LinearLayout.

Chcę umieścić promień narożnika we własnym sterowaniu, jak na obrazku pokazanym poniżej.

enter image description here

ustawić ten rozciągliwej do 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> 

odkształcalne do 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> 

Ale gdy uruchamiam to w Android 2.3 to wyjście (Emulator i nieruchomości Device)

enter image description here

Jeśli uruchomić również w Androidzie 4.0. To działa dobrze.

enter image description here

Pytanie jest, co się dzieje w moim kodu? Lub jest błąd w systemie Android 2.3?

+0

Narożniki do rysowania ImageButton mają zdefiniowane dwa razy topRightRadius i bottomRightRadius. Czy to literówka? A jaki jest pożytek z ułamka dp? – Rajesh

+0

@Rajesh Tak, przepraszam. Zobaczysz, dlaczego użyłem 0.1dp na tym linku http://stackoverflow.com/questions/3056232/how-to-make-a-shape-with-left-top-round-rounded-corner-and-left-bottom -rounded-c –

Odpowiedz

26

OK, więc tutaj jest umowa, która również mnie odstraszyła. Są 2 rzeczy z tym.

W selektorze ImageButton wydawało się, że dwa razy w każdym tagu narożnym skopiowano atrybuty dla dwóch rogów.

Drugi to błąd Androida do wersji 3.0. Przy osobnym określaniu narożników odwracane są dolne lewe i prawe narożniki.

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

Mam wyodrębnione wartości się dimens i umieścić je w dwóch różnych plikach,

res/wartości/corners.xml - z odwróconą rzeczy

res/wartości-v12 /corners.xml - z odpowiednimi wartościami.

+0

A więc od wersji 3.1 problem został rozwiązany? –

+0

Od API 12 i na stałe. Whoops napisał niewłaściwą wersję. Ale tak –

+0

to naprawić? –

1

Występuje błąd we wcześniejszych wersjach (wcześniejszych niż ICS, tj. 4.0) Androida, w których nieprawidłowo zaimplementowano atrybut "rogi" klasy "Kształt". Tak więc, aby uzyskać właściwy rodzaj narożników we wszystkich wersjach, trzeba napisać warunek, który sprawdza wersję docelową i odpowiednio można ustawić poprawne tło.metoda A coś takiego rozwiąże problemu -

/** * obsługi błędów w wersji Pre ICS z elementem narożnym klasy Shape * */

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

gdzie w „R.drawable. rogi btn_rounded_left”są realizowane jak

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

i jeśli jest uruchomiony na wcześniejszych wersjach, a następnie ustawić tło mający narożniki jak

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

Podobnie dla przycisku po prawej stronie. Mam nadzieję, że to rozwiąże Twój problem.

Powiązane problemy