在低版本Android上使用Material Design——AppCompat v21
来源:互联网 发布:算法加密芯片 编辑:程序博客网 时间:2024/05/19 13:57
What's new in AppCompat?
开始使用
dependencies { compile "com.android.support:appcompat-v7:21.0.+"}
如果你的App首次使用AppCompat
所有的Activity必须继承ActionBarActivity,ActionBarActivity继承自v4包的FragmentActivity,因此你仍然可以使用Fragment.
所有theme必须继承
Theme.AppCompat
——这个主题包含一些不同的子主题,比如Light
和NoActionBar
。如果你要inflate一些元素(比如说一个列表)以展示在ActionBar上的话,请确保你使用的是ActionBar的themed context——使用getSupportActionBar().getThemedContext()方法获得这个context。
对MenuItem进行相关操作时,必须MenuItemCompat的静态方法
如果你的App之前就使用AppCompat
values/themes.xml:<style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <!-- Set AppCompat’s actionBarStyle --> <item name="actionBarStyle">@style/MyActionBarStyle</item> <!-- Set AppCompat’s color theming attrs --> <item name=”colorPrimary”>@color/my_awesome_red</item> <item name=”colorPrimaryDark”>@color/my_awesome_darker_red</item> <!-- The rest of your attributes --></style>
设置主题
values/themes.xml:<style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <!-- colorPrimary is used for the default action bar background --> <item name=”colorPrimary”>@color/my_awesome_color</item> <!-- colorPrimaryDark is used for the status bar --> <item name=”colorPrimaryDark”>@color/my_awesome_darker_color</item> <!-- colorAccent is used as the default value for colorControlActivated, which is used to tint widgets --> <item name=”colorAccent”>@color/accent</item> <!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight, and colorSwitchThumbNormal. --></style>
Widget着色(Widget tinting)
AppCompat’s toolbar中的一切 (action modes等等)
EditText
Spinner
CheckBox
RadioButton
Switch (要使用新的android.support.v7.widget.SwitchCompat)
CheckedTextView
Toolbar组件
如果你想要使用现有的ActionBar功能(比如使用菜单、ActionBarDrawerToggle等等)同时又想自己掌握它的样式,那么你可以把ToolBar用作ActionBar。
对于一些ActionBar所不支持的场景——比如说在同一屏幕上使用多个ToolBar、使用低于屏幕宽度的尺寸的ToolBar等等(看上图就知道了)——你就要使用ToolBar了。
Action Bar
<android.support.v7.widget.Toolbar android:id=”@+id/my_awesome_toolbar” android:layout_height=”wrap_content” android:layout_width=”match_parent” android:minHeight=”?attr/actionBarSize” android:background=”?attr/colorPrimary” />
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar);}
Standalone
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); // Set an OnMenuItemClickListener to handle menu item clicks toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { // Handle the menu item return true; } }); // Inflate a menu to be displayed in the toolbar toolbar.inflateMenu(R.menu.your_toolbar_menu);}
Styling
<android.support.v7.widget.Toolbar android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
DarkActionBar
<android.support.v7.widget.Toolbar android:layout_height=”wrap_content” android:layout_width=”match_parent” android:minHeight=”@dimen/triple_height_toolbar” app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
SearchView Widget
values/themes.xml:<style name=”Theme.MyTheme” parent=”Theme.AppCompat”> <item name=”searchViewStyle”>@style/MySearchViewStyle</item></style><style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”> <!-- Background for the search query section (e.g. EditText) --> <item name="queryBackground">...</item> <!-- Background for the actions section (e.g. voice, submit) --> <item name="submitBackground">...</item> <!-- Close button icon --> <item name="closeIcon">...</item> <!-- Search button icon --> <item name="searchIcon">...</item> <!-- Go/commit button icon --> <item name="goIcon">...</item> <!-- Voice search button icon --> <item name="voiceIcon">...</item> <!-- Commit icon shown in the query suggestion row --> <item name="commitIcon">...</item> <!-- Layout for query suggestion rows --> <item name="suggestionRowLayout">...</item></style>
结语
FAQ
为啥我的老Android系统上的EditText(或者上面提到的支持的控件)长得不像Material风格呢?
你使用自己的自定义的widget(比如使用的自定义的继承了EditText的类)。
你创建EditText的时候没有给它LayoutInflater(比如直接New EditText())
为何某某组件在我的老Android系统上长得不像Material风格?
为啥我的ActionBar在Android 5.0上的阴影,我已经把android:windowContentOverlay设置为null了啊?
为啥我的老版本Android没有波纹效果?
我使用了AppCompat后还能用Preference么?
- 在低版本Android上使用Material Design——AppCompat v21
- AppCompat 21实现低版本手机使用Material Design
- 在低版本android系统上实现Material design应用
- Android L Material Design 初探 (基于AppCompat v21)
- Android:AppCompat v21 - Material Design for Pre-Lollipop Devices!
- 在低版本android系统上实现Material design应用(转载)
- 在较低版本上面使用Material Design风格
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design
- appcompat v21: material design for pre-Lollipop devices!
- 在低版本android系统上实现Material设计应用
- 在低版本android系统上实现Material设计应用
- 在低版本android系统上实现Material设计应用
- 在低版本android系统上实现Material设计应用
- Android Material Design向下兼容至低版本Android SDK设备
- [Material Design开发系列1]AppCompat V21:将MD兼容到5.0之前的设备
- Material Design的低版本兼容实现——View & Animation
- 兼容低版本的 Material Design ProgressBar
- Material Design开发文章系列1:AppCompat V21:将 Materia Design 兼容到于5.0之前的设备
- 每日一道算法题:打印一维数组的所有组合
- 回忆this,super,static,final
- Linux-2.6.32内核编译流量计数器nfacct
- 拼接成象形动物
- 纪念一下今天开博
- 在低版本Android上使用Material Design——AppCompat v21
- 容斥原理
- R语言回归篇
- OCday03
- HDU 4544 贪心+优先队列
- c编程:数字翻转
- R语言之方差分析篇
- oracle建表的问题
- ELF 文件的 加载 运行 和 进程映射