启用和关闭ActionBar

android 3.0(API 11)以上默认启动ActionBar。
如果不想使用ActionBar,这可以在AndroidManifest.xml文件中修改:

<application        android:allowBackup="true" //是否将程序加入到系统的备份和恢复架构中        android:icon="@mipmap/ic_launcher"//设置ActionBar图标        android:label="@string/app_name"//设置ActionBar标题        android:theme="Theme.AppCompat.Light.NoActionBar">

或者在代码中使用hide()方法:

public class MainActivity extends AppCompatActivity {    ActionBar actionBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_layout);        actionBar = getSupportActionBar();//如果继承的是Activity,则使用getActionBar        actionBar.hide();    }

添加ActionBar的菜单选项

本来看着教程,觉得ActionBar挺简单,跟着教程敲了同样的代码,结果就出现了红线(提示错误),我那个郁闷啊,明明一模一样的代码怎么就错了那!我用的是android-studio:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">    <item  android:id="@+id/item1" android:title="item1" android:showAsAction="never"/>//这里提示出错</menu>

后来经过查找才找到问题所在,因为android-studio默认地导入了appcompat.v7这个包,这个是Google自己的一个向下兼容包,能够让低版本显示高版本的界面。因为有这个包的存在,想要设置showAsAction这个属性,按如下修改:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"//添加这个命名空间 xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">    <item  android:id="@+id/item1" android:title="item1" app:showAsAction="never"/>//此处改为app:showAsAction</menu>

为什么这样改就可以了那?首先我们先看 xmlns:android=”http://schemas.android.com/apk/res/android”
刚开始学的就注意这一行代码了,但是一直不知道是什么意思,于是就去查了一下,才明白这行代码有什么用,也和这里的showAsAction属性有关。
”xmlns“是”XML Namespaces“的缩写,意思是命名空间,作用就是指定在代码所用的固定词汇去哪里找。”http://schemas.android.com/apk/res/android“这是res资源的标准前缀,后面的这个android是一个包名。也就是我们使用android命名空间的资源定义的路径在android这个包名之下。例如我们经常使用的”android:id“这个属性,这里的”id“属性就是在名为”android“的命名空间里找的,也就是后面的路径里找,于是有了这个属性的作用:编号。
而这里我们用到的showAsAction属性,如果导入了appcompat.v7这个包,就要在”http://schemas.android.com/apk/res-auto“这个路径找,因此需要添加一个这个路径的命名空间。
ps:如果直接使用android:showAsAction,但对于早期的版本来说android命名空间下不存在这个属性,就不能看到ActionBar的效果,而这个属性的定义存在于support V7 里面,所以可以兼容之前的版本。
当然这里的”app“是可以改为任意字符的,只要用的时候也用对应的字符就可以了。例如改成这样:

xmlns:a="http://schemas.android.com/apk/res-auto"

使用的时候:

a:showAsAction="never"

这下问题就解决了。

顺带着说下 xmlns:tools=”http://schemas.android.com/tools” ,这是一个工具的命名空间,有了它我们就可以使用这个路径下的属性了,例如:tools:text等。这些属性有什么用那?在写布局代码的时候,IDE可以看到布局的预览效果,但是有些效果则必须在运行之后才能看见,例如:TextView在xml中没有设置任何字符,而是在activity中设置了text。为了在预览中看到效果,你必须在xml中为TextView控件设置android:text属性,看完效果后在删除,这样就显得很麻烦。而这个tools工具就是可以让我们能够更好地查看预览效果,例如上面这个例子,就可以直接添加一个 tools:text属性,可以达到相同的预览效果,优点就是不用去管他,因为这个属性只在预览的时候有效,程序真正运行的时候是不存在的。

item:菜单项;
group: 菜单组;
checkableBehavior:指定该组菜单的选择行为,可指定:none(不可选)、all(多选)、single(单选);
visible:指定是否可见;
enable:指定是否可用;

item元素可以包含如下子元素:

android:id
android:title
android:icon
android:checkable
android:checked
android:visible
android:enable
android:alphabeticShortcut 指定字符快捷键
android:numberShortcut 指定数字快捷键
android:showAsAction 显示为ActionBar的菜单项,可指定:always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示;ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow(三个点)中;never则表示永远显示在overflow中。

继续!写完menu的xml文件后,要重写onCreateOptionsMenu()方法:

@Override    public boolean onCreateOptionsMenu(Menu menu) {        MenuInflater inflater = new MenuInflater(this);        inflater.inflate(R.menu.menu,menu);        return super.onCreateOptionsMenu(menu);    }

这样就完成了,运行一下试试。

Action选项的点击事件

虽然有了选项,但是目前还没有什么用,接着可以添加选项的点击事件,只需要重写activity的onOptionsItemSelected()方法就可以了,在其中判断点击的是哪个item,并写上点击事件:

 @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.item1:            //省略了点击事件                return true;            case R.id.item2:            //省略了点击事件                return true;        }        return super.onOptionsItemSelected(item);    }

应用程序图标导航

我们可以通过调用ActionBar的setDisplayHomeAsUpEnabled()方法来启用图标导航功能:

public class MainActivity extends AppCompatActivity {    ActionBar actionBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_layout);        actionBar = getSupportActionBar();        actionBar.setDisplayHomeAsUpEnabled(true);    }

这样图标转变成可点击的图标,并在图标上添加一个向左的箭头。
接着,可以在onOptionsItemSelected()方法中添加点击事件了:

@Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.item1:                return true;            case R.id.item2:                return true;            case android.R.id.home:                return true;        }        return super.onOptionsItemSelected(item);    }

其他更多的内容可以参考郭大神的博客:http://blog.csdn.net/guolin_blog/article/details/18234477

更多相关文章

  1. 在service和BroadCastReceiver中 启动activity和alertdialog
  2. android 简单的aidl
  3. android Manifest 一些属性
  4. ERROR: All flavors must now belong to a named flavor dimensi
  5. Android(安卓)中自定义属性(attr.xml,TypedArray)的使用
  6. 全屏显示Dialog的设置
  7. Android(安卓)页面自动切换实现
  8. flutter 密码/验证码输入框
  9. Android(安卓)ImageView 的 scaleType 属性

随机推荐

  1. Python 字典 pop() 方法
  2. 细菌觅食算法-python实现
  3. Python网页静态爬虫
  4. Python学习系列(六)(模块)
  5. 校招录取之后前往公司实习,现在感觉自己前
  6. 如何将dict转换为spark map输出
  7. 当使用一个传送到另一个的python文件时,我
  8. matplotlib绘制符合论文要求的图片
  9. classmethod,staticmethod,还有类里面一般
  10. Python文件操作大全,随机删除文件夹内的任