android带menu的主题,Android Theme and Menu 主题菜单相关

Demo

学了一下Chris Banes大神的项目。总结一下theme相关的小知识点。先看个定义主题的不错的小case:

在values目录下建立两个命名为themes的文件:

themes.xml

true

true

@null

@null

@color/primary_color_translucent

@style/Widget.AnDream.ProgressBar

@style/Widget.AnDream.RatingBar

// 这个是自定义主题的属性,在attrs里面

@color/light_gray

true

@color/primary_color

@color/primary_color_dark

@color/accent_color

@android:color/black

false

themes.xml(v21):

//这里体会一下 设置状态栏透明,设置windowDrawsSystemBarBackgrounds true

@android:color/transparent

@android:color/transparent

分析

层次比较清晰。

根据平台分别兼容holo和design的Platform.Theme.AnDream和Platform.Theme.AnDream.Dark

子base主题:Base.Theme.AnDream和Base.Theme.AnDream.Dark

然后程序用的主题Theme.AnDream。以及继承自Base.Theme.AnDream.Dark的Theme.AnDream.Images

最后一个是程序主题Theme.AnDream的一个扩展Theme.AnDream.Framed。

层次非常清晰,是个不错的建主题的样例,基本各种需要的主题就都有了。

主题的源头是系统的Theme.AppCompat.Light.NoActionBar和Theme.AppCompat.NoActionBar。兼容包里没有ActionBar的浅色和深色主题,用这组主题方便我们后续自由的使用toolbar。

另外点进去看到appcompat源码里的:

false

true

demo里意义比较模糊的属性有:

overlays 是覆盖物的意思。

true

and the actionmode will be shown over the action bar instead of pushing it down.It basically lets AppCompat know that you have a toolbar located in the top of the screen and that it should draw the ActionMode on top of it.

ActionMode显示在顶栏,而不是屏幕中的菜单。告诉appcompat你有个toolbar在屏幕顶上,它应该把ActionMode画到toolbar上面。

@null

定义contentoverlay的背景的,ContentOverlay背景为null 和actionbar下面的阴影有关

@color/primary_color_translucent

高亮字体颜色

@android:color/black

屏幕背景色

true

需要绘制系统操作栏背景

@android:color/transparent设置状态栏透明

另外菜单的写法例如:

android:icon="@drawable/ic_new_game"

android:title="@string/new_game"

android:showAsAction="ifRoom"/>

android:icon="@drawable/ic_help"

android:title="@string/help" />

android:icon

引用一个要用作项目图标的 Drawable 类。

android:title

引用一个要用作项目标题的字符串。

android:showAsAction

指定此项应作为操作项目显示在操作栏中的时间和方式。

toolbar右边的三个点是 操作栏右侧的操作溢出菜单,与手机物理菜单按键作用一样

需要支持快速访问的重要操作,可以在相应的 中添加 android:showAsAction=”ifRoom” ,从而将此项提升到操作栏中。

android:showAsAction总共有五个属性。

never:永远不会显示。只会在溢出列表中显示。

ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。

always:无论是否溢出,总会显示。

withText:Title会显示。

collapseActionView:可拓展的Item。

小拓展:

Android 2.3.x 及更低版本的系统,则当用户首次打开选项菜单时,系统会调用 onCreateOptionsMenu() 来创建该菜单。如果您开发的应用是用于 Android 3.0 及更高版本的系统,则系统将在启动 Activity 时调用 onCreateOptionsMenu(),以便向操作栏显示项目。

在 Activity 生命周期中发生的事件修改选项菜单,则可通过 onPrepareOptionsMenu() 方法执行此操作。

在 Android 2.3.x 及更低版本中,每当用户打开选项菜单时(按“菜单”按钮),系统均会调用 onPrepareOptionsMenu()。

在 Android 3.0 及更高版本中,当菜单项显示在操作栏中时,选项菜单被视为始终处于打开状态。发生事件时,如果您要执行菜单更新,则必须调用 invalidateOptionsMenu() 来请求系统调用 onPrepareOptionsMenu()。

要想长按(或者选中复选框或视图内的类似 UI 组件)显示出来上下文操作模式,如网易新闻长按顶部出现的复制粘贴等。有的控件webview会默认实现。

为单个视图启用上下文操作模式

如果希望仅当用户选择特定视图时才调用上下文操作模式,则应:

实现 ActionMode.Callback 接口。在其回调方法中,您既可以为上下文操作栏指定操作,又可以响应操作项目的点击事件,还可以处理操作模式的其他生命周期事件。

当需要显示操作栏时(例如,用户长按视图),请调用 startActionMode()。

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

// Called when the action mode is created; startActionMode() was called

@Override

public boolean onCreateActionMode(ActionMode mode, Menu menu) {

// Inflate a menu resource providing context menu items

MenuInflater inflater = mode.getMenuInflater();

inflater.inflate(R.menu.context_menu, menu);

return true;

}

// Called each time the action mode is shown. Always called after onCreateActionMode, but

// may be called multiple times if the mode is invalidated.

@Override

public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

return false; // Return false if nothing is done

}

// Called when the user selects a contextual menu item

@Override

public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

switch (item.getItemId()) {

case R.id.menu_share:

shareCurrentItem();

mode.finish(); // Action picked, so close the CAB

return true;

default:

return false;

}

}

// Called when the user exits the action mode

@Override

public void onDestroyActionMode(ActionMode mode) {

mActionMode = null;

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值