2012-11-25 11 views
7

Android 4.2 nie wyświetla poprawnie RadioButton, gdy używany jest android: drawableLeft. drawableRight jest w porządku.Android 4.2 RadioButton android: błąd drawableLeft?

Rysowanie po lewej stronie zachodzi na grafikę przycisku Radio. I przynajmniej Android 2.2-4.1 wydaje się być w porządku z drawableLeft.

Czy znasz sposób obejścia tego problemu? Ustawienie drawableLeft programowo nie działało, aby rozwiązać ten problem.

4,2 Android problem

4.2 issue

4,1 Android powoduje to poprawnie (również co najmniej Android 2.2-4.0 czynią to prawidłowo zbyt)

4.1 is correct

Android Kod układu XML tego :

<RadioButton 
    android:id="@+id/radio_cloud_dropbox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="10dp" 
    android:drawableLeft="@drawable/dropbox_logo" 
    android:checked="true" 
    android:text="@string/lbl_cloud_dropbox" /> 
+0

Mam do czynienia z podobnym problemem, ale w moim przypadku widzę złe wyrównanie z tekstem narysowanym za pomocą canvas.drawText() !! –

+0

To jest moje pytanie: http://stackoverflow.com/questions/13941270/android-4-2-on-nexus-7-canvas-drawtext-not-working-corly –

Odpowiedz

0

My tymczasowe rozwiązanie tego błędu było zastąpienie przez układ nadrzędny RadioGroupTableLayout z TableRow (ów) zawierającego RadioButton i TextView. Chociaż istnieją również inne rozwiązania.

<TableLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TableRow android:onClick="onDropboxClick" > 
     <RadioButton 
      android:id="@+id/radio_cloud_dropbox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:onClick="onDropboxClick" /> 

     <TextView 
      android:drawableLeft="@drawable/cloud_logo_dropbox" 
      android:gravity="center_vertical" 
      android:text="Dropbox" /> 
    </TableRow> 

    <TableRow android:onClick="onGoogleDriveClick" > 
     <RadioButton 
      android:id="@+id/radio_cloud_google_drive" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:onClick="onGoogleDriveClick" /> 

     <TextView 
      android:drawableLeft="@drawable/cloud_logo_google_drive" 
      android:gravity="center_vertical" 
      android:text="Google Drive" /> 
    </TableRow> 

</TableLayout> 

Ponieważ jednak RadioGroup nie mógł być używany z zagnieżdżonych układów,/wybierająca Odznaczanie sprawdzonej stanu musi być wykonywane ręcznie w odpowiedniej aktywności w metodach obsługi zdarzeń:

public void onDropboxClick(View view) { 
    checkRadio(R.id.radio_cloud_dropbox); 
} 

public void onGoogleDriveClick(View view) { 
    checkRadio(R.id.radio_cloud_google_drive); 
} 

private void checkRadio(int radioId) { 
    if (radioId == R.id.radio_cloud_dropbox) { 
     dropboxRadio.setChecked(true); 
     googleDriveRadio.setChecked(false); 
    } else if (radioId == R.id.radio_cloud_google_drive) { 
     dropboxRadio.setChecked(false); 
     googleDriveRadio.setChecked(true); 
    } 
} 
0

Jest to prawdopodobnie produkt nowej obsługi kierunku układu, który został dodany do platformy w systemie Android 4.2 (tj. wspierać układ od lewej do prawej lub od prawej do lewej). Wpływa to na sposób, w jaki umieszczają lewą i prawą stronę do rysowania. Jaki jest Twój atrybut manifestu android:targetSdkVersion? Technicznie uważam, że jeśli jest ustawiony na 16 lub niższy, zmiany te powinny być domyślnie wyłączone, nawet jeśli twoje ustawienia regionalne w przeciwnym wypadku byłyby możliwe.

Polecam zgłosić błąd na http://b.android.com, ponieważ w trybie RTL spodziewałbym się, że przycisk do przeciągnięcia również znajdzie się po drugiej stronie. W międzyczasie możesz spróbować wymusić kierunek układu, dodając atrybut layoutDirection do swojego TextView i zmuszając go do uzyskania LTR, aby wyglądał tak, jak oczekujesz. Można również zadzwonić to od kodu Java z setLayoutDirection()

+0

Dzięki za odpowiedź. Ustawienie android: targetSdkVersion z 16 na 17 nie pomogło. Również użycie jawnego androida: layoutDirection = "ltr" w RadioButton lub RadioGroup nie zmieniło niczego. Zauważ, że android: drawableLeft jest uszkodzony, ale android: drawableRight działa poprawnie. To niewłaściwe zachowanie można zaobserwować w Eclipse "Układ graficzny", jak również po wybraniu API 17 w combobox. – petrsyn

+0

Mam zgłoszenie błędu również do Google http://code.google.com/p/android/issues/detail?id=40451 – petrsyn

0

ten wydaje się być ustalony w systemie Android 4.2.2.

6

można użyć w przycisku radiowego:

ustawić przycisk @null i rozciągliwej lewy przycisk zestawu, że:

<RadioGroup 
     android:id="@+id/hn_radio_group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <RadioButton 
      android:id="@+id/rb_Select_by_proposal" 
      style="@style/RadioButtonText" 
      android:checked="true" 
      android:tag="1" 
      android:text="@string/select_by_proposal" /> 

     <RadioButton 
      android:id="@+id/rb_Select_by_first_letter" 
      style="@style/RadioButtonText" 
      android:tag="2" 
      android:text="@string/select_by_first_letter" /> 
    </RadioGroup>  

i ten styl:

<style name="RadioButtonText"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:button">@null</item> 
    <item name="android:drawableLeft">@drawable/radio_selector</item> 
    <item name="android:drawablePadding">10dp</item> 
</style> 

dla przestrzeni między przyciskiem a użyciem tekstu pod adresem:

<item name="android:drawablePadding">10dp</item> 
+0

To właściwie nie rozwiązuje problemu. Gdzie jest narysowane niestandardowe logo (Dropbox)? Chodziło o to, aby narysować zarówno selektor radiowy, jak i obraz niestandardowy (Dropbox). – petrsyn