AppCompat v22.1.0没有正确地为片段指出所有xml小部件

当使用AppCompat 22.1.0使用基于xml的布局时,并非所有支持的小部件都使用Android 4.4为我的片段着色或材料为主题。

我看到以下小部件的这种行为(其他未经测试):

  • RadioButton(无色调)
  • CheckBox(无色调)
  • Spinner(应用设备默认主题)
  • EditText(应用设备默认主题)
  • RatingBar(应用设备默认主题)
  • 按钮(应用设备默认主题)

它曾经在AppCompat v22.0.0中工作。

截图(左4.4,右5.0):

示例截图

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

      

的themes.xml

    

目前报告为错误: https : //code.google.com/p/android/issues/detail?id = 169760

临时解决方法是使用Fragment父Activity LayoutInflater: getActivity().getLayoutInflater()而不是onCreateView方法中提供的LayoutInflater。

例:

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

注意:另一种解决方案是在xml布局中使用特殊的AppCompat小部件:

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

但这基本上意味着您需要使用AppCompat替换每个小部件。

您可以强制应用于视图的主题,只需要在父视图上添加以下行:

   

然后,线性布局中的所有视图都将声明的强调颜色采用清单中的相应活动(通过主题)。