当前位置:天才代写 > tutorial > 安卓教程 > Android学习笔记:ActionBar使用介绍

Android学习笔记:ActionBar使用介绍

2021-02-23 15:11 星期二 所属: 安卓教程 浏览:1070

一、基本要素

最权威性和官方网的详细介绍可以看google的api文档

http://developer.android.com/training/basics/actionbar/setting-up.html

 http://developer.android.com/guide/topics/ui/actionbar.html

ActionBar故称思义,实际操作栏的含意,一般坐落于activity的顶端,能够置放文字标识,输入框、按键、标志等。是 Android3才适用的。

在eclipse建立一个默认设置的activity,运行后如下图所显示,默认设置表明了app的标志和app的name,留意挑选不一样的版本号很有可能有稍微差别。

大家再看看google api文档上给的事例图

上边图上,①是app的标志;②是2个实际操作按键,一个是检索按键;③是overflow按键(overflow的含意 后边再详细介绍)。

二、设定无法显示ActionBar

假如要想Activity无法显示ActionBar,能够有二种方式:

1)在 AndroidManifest.xml中特定Application或Activity的theme如:

android:theme=”@android:style/Theme.Light.NoTitleBar”

2)在activity的onCreate事情中根据编码设定,以下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}

 那样,activity就不容易表明ActionBar了。

三、变更默认设置标志和题目

默认设置状况下,activity会应用AndroidManifest.xml中application的icon特性特定的照片来做为ActionBar的标志,如:

<application
android:allowBackup=”true”
android:icon=”@drawable/ic_launcher”

可是大家还可以更改这一默认设置个人行为,如果我们要想应用此外一张图片来做为ActionBar的标志,能够设定activity的logo特性来开展特定。

例如新项目的res/drawable文件目录下有一张mylogo.png图片,就可以在AndroidManifest.xml中那样特定:

<activity
android:logo=”@drawable/mylogo”

题目能够根据设定环境变量中的 android:label 特性来设定,还可以根据编码来设定,如:

    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("我的应用");
	}

四、加上实际操作按键

ActionBar还能够依据应用软件当今的作用来出示两者之间有关的Action按键,这种按键都是会以标志或文本的方式立即表明在ActionBar上。假如按键太多,ActionBar上表明不完,空出的一些按键能够掩藏在overflow里边(最右侧的三个点便是overflow按键,前边提及了),点一下一下overflow按键就可以见到所有的Action按键了。
当Activity运行的情况下,系统软件会启用Activity的onCreateOptionsMenu()方式来取下全部的Action按键,大家只必须在这个方式中去载入一个menu資源,并把全部的Action按键都界定在資源文档里边就可以了。

1、最先在 res\menu文件目录下提升环境变量,如 main.xml (用eclipse建立的时候会默认设置建立该文件)

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.testactionbar.MainActivity" >

    <item  
        android:id="@ id/action1"  
        android:icon="@drawable/a1"  
        android:showAsAction="always"  
        android:title="action1"/>  
    <item  
        android:id="@ id/action2"  
        android:icon="@drawable/a2"  
        android:showAsAction="ifRoom"  
        android:title="action2"/>  
    <item  
        android:id="@ id/action3"  
        android:icon="@drawable/a3"  
        android:showAsAction="never"  
        android:title="action3"/>
</menu>

  上边的文档中,根据item标签提升了3个实际操作按键。<item>标识中又有一些特性,在其中id是该Action按键的唯一标志符,icon用以特定该按键的标志,title用以特定该按键很有可能表明的文本(在设定了标志的状况下,ActionBar上不容易表明文本),showAsAction则特定了该按键表明的部位,关键有下列几类值可选择:always表明始终表明在ActionBar中,假如显示屏室内空间不足则不显示;ifRoom表明显示屏室内空间够的状况下表明在ActionBar中,不足得话就表明在overflow中;never则表明始终表明在overflow中(它是默认设置状况)。

 2、然后,重写Activity的onCreateOptionsMenu()方式,编码以下所显示:

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

  如果是用eclipse建立的工程项目,这一段编码缺省会城市出示。

五、加上实际操作按键的回应事情

当点一下实际操作按键时,能够开启事情,在事情编码中能够作出自身的解决,如表明新界面。当客户点一下Action按键的情况下,系统软件会启用Activity的onOptionsItemSelected()方式,根据方式传到的MenuItem主要参数,我们可以启用它的getItemId()方式和menu資源中的id开展较为,进而鉴别出客户点一下的是哪一个Action按键,随后作出相对的实际操作,如:

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId()){
		case R.id.action1:
			Toast.makeText(this, "i am" item.getTitle(), Toast.LENGTH_SHORT).show();
			return true;
		case R.id.action2:
			Toast.makeText(this, "i am" item.getTitle(), Toast.LENGTH_SHORT).show();
			return true;
		case R.id.action3:
			Toast.makeText(this, "i am" item.getTitle(), Toast.LENGTH_SHORT).show();
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}

 

六、Overflow按键无法显示的状况

尽管如今大家早已把握了许多 ActionBar的使用方法,可是如果你真实去应用它的情况下還是很有可能会碰到各式各样的难题,例如很多人都是会遇到overflow按键无法显示的状况。本来是一样的一份编码,overflow按键在有一些手机会表明,而在有一些手机偏要就无法显示,这是为什么呢?之后我小结了一下,overflow按键的表明状况和手机上的硬件配置状况是有关系的,假如手机上沒有物理学Menu键得话,overflow按键就可以表明;如果有物理学Menu键得话,overflow按键就不容易表明出去,这时候仅有按住物理学按键后才表明掩藏在overflow中的按键。 但很有可能许多客户不清楚这一点。

这显而易见是一种十分睾丸疼的设计方案,在不一样手机居然表明了不一样的页面,并且操作步骤也彻底不一样,那样会给客户一种十分不习惯的觉得。话说Google为何要把ActionBar的overflow设计方案成那样我也不太了解,可是大家還是有方法更改这一默认设置个人行为的。
事实上,在ViewConfiguration这一类中有一个称为sHasPermanentMenuKey的静态变量,系统软件便是依据这一自变量的值来分辨手机上是否有物理学Menu键的。自然这是一个內部自变量,我们无法立即浏览它,可是能够根据反射面的方法改动它的值,让它始终为false就可以了,编码以下所显示:
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    ......  
    setOverflowShowingAlways();  
}  
private void setOverflowShowingAlways() {  
    try {  
        ViewConfiguration config = ViewConfiguration.get(this);  
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");  
        menuKeyField.setAccessible(true);  
        menuKeyField.setBoolean(config, false);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}  

那样只需有表明不全的按键,overflow按键便会一直表明了。

七、让Overflow中的选择项表明标志

假如你点一下一下overflow按键去查询掩藏的Action按键,你能发觉这些Action按键全是只表明文本无法显示标志的。

它是官方网的默认设置实际效果,Google觉得掩藏在overflow中的Action按键都应当只表明文本。自然,假如你觉得那样不足美观大方,期待在overflow中的Action按键还可以表明标志,大家依然能够想办法来更改这一默认设置个人行为。
实际上,overflow中的Action按键该不该表明标志,是由MenuBuilder这一类的setOptionalIconsVisible方式来决策的,如果我们在overflow被进行的情况下给这一方式传到true,那麼里边的每一个Action按键相匹配的标志就都是会表明出来。启用的方式自然依然是用反射面了,编码以下所显示:
@Override  
public boolean onMenuOpened(int featureId, Menu menu) {  
    if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {  
        if (menu.getClass().getSimpleName().equals("MenuBuilder")) {  
            try {  
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);  
                m.setAccessible(true);  
                m.invoke(menu, true);  
            } catch (Exception e) {  
            }  
        }  
    }  
    return super.onMenuOpened(featureId, menu);  
}  

 能够见到,这儿大家重写了一个onMenuOpened()方式,当overflow被进行的情况下便会回调函数这一方式,然后在这个方式的內部根据回到反射面的方式将MenuBuilder的setOptionalIconsVisible自变量设定为true就可以了。

 

    关键字:

天才代写-代写联系方式