9

Podczas korzystania z układów opartych na xml przy użyciu AppCompat 22.1.0 nie wszystkie obsługiwane widgety są przyciemniane lub tematyczne dla moich Fragmentów z Androidem 4.4.AppCompat v22.1.0 niepoprawne stosowanie wszystkich widżetów XML dla fragmentów

Widzę to zachowanie z następujących widżetów (inni nie testowane):

  • RadioButton (Brak koloru odcień)
  • CheckBox (Brak koloru odcień)
  • Spinner (domyślny motyw Urządzenie jest stosowane)
  • EditText (Device domyślny motyw jest stosowana)
  • RatingBar (Device domyślny motyw jest stosowana)
  • Przycisk (defaul Device t temat jest stosowany)

Wcześniej pracował w AppCompat v22.0.0.

ekranu (lewy 4,4, prawy 5,0):

Example screenshot

MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (savedInstanceState == null) { 
      getSupportFragmentManager() 
        .beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 

    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      return rootView; 
     } 
    } 
} 

fragment_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <RadioButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:text="RadioButton test"/> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:text="CheckBox test"/> 

    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:entries="@array/someStrings"/> 
</LinearLayout> 

Themes.xml

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"></style> 
</resources> 
+2

Naprawiono za pomocą 22.1.1 –

+0

Rzeczywiście! Szybka reakcja od Google! –

Odpowiedz

11

ta jest obecnie zgłaszane jako błąd: https://code.google.com/p/android/issues/detail?id=169760

tymczasowe obejście problemu jest użycie fragmentu LayoutInflater dominująca działalność: getActivity().getLayoutInflater() zamiast dostarczonego LayoutInflater w metodzie onCreateView.

Przykład:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = getActivity().getLayoutInflater().inflate(R.layout.fragment_main, container, false); 
    return rootView; 
} 

Uwaga: Innym rozwiązaniem jest użycie specjalnych widgetów AppCompat w układzie XML:

  • android.support.v7.widget.AppCompatRadioButton
  • android.support.v7.widget.AppCompatCheckBox
  • andro id.support.v7.widget.AppCompatSpinner

ale to w zasadzie oznacza, że ​​trzeba wymienić każdy widget z AppCompat jednym.

+0

Ouch. Miło być nadal na v22. – natario

+0

@Rolf możesz oznaczyć to jako poprawne, jeśli je wymyśliłeś? –

+0

Doskonałe obejście. – Matthew

2

Można wymusić motyw zastosowany do poglądów, tylko trzeba dodać te linie na widoku macierzystego:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      tools:context="com.example.yourActivityThatHasATheme" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 
</LinearLayout> 

Następnie wszystkie widoki wewnątrz układu liniowego przybrać kolor akcent deklarowaną do danej działalności w manifest (poprzez motyw).

Powiązane problemy