1、ActionBar
1)Android 3.0之后引入的新的对象
2)只要targetSdkVersion的值不低于11,创建的Activity中默认都会带有
ActionBar
2、不添加ActionBar
当然了,如果你不想为一个特定的Activity设置ActionBar,设置
Activity主题为Theme.Holo.NoActionBar。
在AndroidManifest.xml文件进行设置:
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
在Activity中获取ActionBar
ActionBar actionBar = getActionBar();
隐藏ActionBar
或者在运行时通过调用hide()隐藏ActionBar,ActionBar被隐藏后
对他进行的其他设置不会起作用。自然也有show()。
actionBar.hide();
3、隐藏或显示ActionBar中的元素
//是否显示返回上一级的按钮
actionBar.setDisplayHomeAsUpEnabled(true);
//是否显示自定义视图View
actionBar.setDisplayShowCustomEnabled(false);
//是否显示图标
actionBar.setDisplayShowHomeEnabled(false);
//是否显示标题
actionBar.setDisplayShowTitleEnabled(false);
如图:
4、菜单
菜单(menu)是菜单项的容器(一个菜单可以包括多个子菜单或菜单项)
菜单项(item)是用于执行功能的
注意不要将菜单和ActionBar混淆,menu是可以放置在ActionBar上面的,也可以
放到手机屏幕的底部,魅族手机自己开发的smartBar就是典型的将menu放到手机屏幕
底部的。
显示菜单步骤:
1)menu布局文件(res/menu/main.xml下)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu1"
android:title="在线帮助"
/>
<item
android:id="@+id/menu2"
android:title="在线升级"
/>
<item
android:id="@+id/menu3"
android:title="在线交友"
/>
</menu>
2)Activity文件
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取到ActionBar
ActionBar actionBar = this.getActionBar();
//显示用户自定义的菜单
actionBar.setDisplayShowCustomEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true; //此处必须返回true,否则菜单将无法显示
}
由于手机版本的不同和Android版本不同,菜单的显示方式和位置有些不同,
在使用的eclipse,自带的模拟其中,当点击menu按钮后,菜单才会显示在
模拟器屏幕的下方。而版本相对较高的手机,则是在手机右上角显示三个点
的按钮,点击后会显示菜单。
现在Google并不建议使用menu,我们应该尽量减少菜单的使用。
手机底部选项卡,我们可以使用FragmentTabHost实现。
3)让菜单项以按钮的形式直接显示在ActionBar上
我们只需要在res/menu/main.xml文件中对item进行设置就可以达到效果
android:showAsAction=""
属性值如下:
never:永不显示为按钮
ifRoom:如果ActionBar有足够的空间就将其显示为按钮
always:总是显示为按钮
withText:是否带上文字
4)将menu放到屏幕下方,就相当于Tab
在AndroidManifest.xml中<application></application>标记中
配置:
android:uiOptions="splitActionBarWhenNarrow"
如图:
4)设置item图标
android:icon="@drawable/arraw2"
设置图标后文字没有显示
5)SearchView
是一个搜索框,显示为一个放大镜,点击后变成文本框
xml文件配置:
<item
android:title="搜索"
android:id="@+id/menu1"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|withText"/>
5、修改ActionBar的背景颜色
res/values-v14/styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!--API 14 theme customizations can go here. -->
<!---->
<item name="android:actionBarStyle">@style/myActionBarStyle</item>
</style>
//自定义ActionBar的属性,继承原有的风格@android:style/Widget.Holo.Light.ActionBar
<style name="myActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#0098CB</item> <!--修改背景颜色-->
</style>
</resources>
6、让ActionBar中的标题居中
1)隐藏ActionBar中原始的标题,这个标题默认实在左边的,而且只能在左边
actionBar.setDisplayShowTitleEnabled(false); //隐藏标题
actionBar.setDisplayShowCustomEnabled(true); //允许显示自定义布局
2)创建自定义的标题布局res/layout/activity_actionbar_title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/action_bar_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="韬睿科技"
/>
</LinearLayout>
3)加载自定义布局
LayoutInflater layoutInflater = LayoutInflater.from(this);
View v = layoutInflater.inflate(R.layout.activity_actionbar_title, null);
actionBar.setCustomView(v, new ActionBar.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
ActionBar.LayoutParams mP = (ActionBar.LayoutParams) v
.getLayoutParams();
mP.gravity = mP.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK
| Gravity.CENTER_HORIZONTAL;
1)Android 3.0之后引入的新的对象
2)只要targetSdkVersion的值不低于11,创建的Activity中默认都会带有
ActionBar
2、不添加ActionBar
当然了,如果你不想为一个特定的Activity设置ActionBar,设置
Activity主题为Theme.Holo.NoActionBar。
在AndroidManifest.xml文件进行设置:
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
在Activity中获取ActionBar
ActionBar actionBar = getActionBar();
隐藏ActionBar
或者在运行时通过调用hide()隐藏ActionBar,ActionBar被隐藏后
对他进行的其他设置不会起作用。自然也有show()。
actionBar.hide();
3、隐藏或显示ActionBar中的元素
//是否显示返回上一级的按钮
actionBar.setDisplayHomeAsUpEnabled(true);
//是否显示自定义视图View
actionBar.setDisplayShowCustomEnabled(false);
//是否显示图标
actionBar.setDisplayShowHomeEnabled(false);
//是否显示标题
actionBar.setDisplayShowTitleEnabled(false);
如图:
4、菜单
菜单(menu)是菜单项的容器(一个菜单可以包括多个子菜单或菜单项)
菜单项(item)是用于执行功能的
注意不要将菜单和ActionBar混淆,menu是可以放置在ActionBar上面的,也可以
放到手机屏幕的底部,魅族手机自己开发的smartBar就是典型的将menu放到手机屏幕
底部的。
显示菜单步骤:
1)menu布局文件(res/menu/main.xml下)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu1"
android:title="在线帮助"
/>
<item
android:id="@+id/menu2"
android:title="在线升级"
/>
<item
android:id="@+id/menu3"
android:title="在线交友"
/>
</menu>
2)Activity文件
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取到ActionBar
ActionBar actionBar = this.getActionBar();
//显示用户自定义的菜单
actionBar.setDisplayShowCustomEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true; //此处必须返回true,否则菜单将无法显示
}
由于手机版本的不同和Android版本不同,菜单的显示方式和位置有些不同,
在使用的eclipse,自带的模拟其中,当点击menu按钮后,菜单才会显示在
模拟器屏幕的下方。而版本相对较高的手机,则是在手机右上角显示三个点
的按钮,点击后会显示菜单。
现在Google并不建议使用menu,我们应该尽量减少菜单的使用。
手机底部选项卡,我们可以使用FragmentTabHost实现。
3)让菜单项以按钮的形式直接显示在ActionBar上
我们只需要在res/menu/main.xml文件中对item进行设置就可以达到效果
android:showAsAction=""
属性值如下:
never:永不显示为按钮
ifRoom:如果ActionBar有足够的空间就将其显示为按钮
always:总是显示为按钮
withText:是否带上文字
collapseActionView
4)将menu放到屏幕下方,就相当于Tab
在AndroidManifest.xml中<application></application>标记中
配置:
android:uiOptions="splitActionBarWhenNarrow"
如图:
4)设置item图标
android:icon="@drawable/arraw2"
设置图标后文字没有显示
5)SearchView
是一个搜索框,显示为一个放大镜,点击后变成文本框
xml文件配置:
<item
android:title="搜索"
android:id="@+id/menu1"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|withText"/>
5、修改ActionBar的背景颜色
res/values-v14/styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!--API 14 theme customizations can go here. -->
<!---->
<item name="android:actionBarStyle">@style/myActionBarStyle</item>
</style>
//自定义ActionBar的属性,继承原有的风格@android:style/Widget.Holo.Light.ActionBar
<style name="myActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#0098CB</item> <!--修改背景颜色-->
</style>
</resources>
6、让ActionBar中的标题居中
1)隐藏ActionBar中原始的标题,这个标题默认实在左边的,而且只能在左边
actionBar.setDisplayShowTitleEnabled(false); //隐藏标题
actionBar.setDisplayShowCustomEnabled(true); //允许显示自定义布局
2)创建自定义的标题布局res/layout/activity_actionbar_title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/action_bar_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="韬睿科技"
/>
</LinearLayout>
3)加载自定义布局
LayoutInflater layoutInflater = LayoutInflater.from(this);
View v = layoutInflater.inflate(R.layout.activity_actionbar_title, null);
actionBar.setCustomView(v, new ActionBar.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
ActionBar.LayoutParams mP = (ActionBar.LayoutParams) v
.getLayoutParams();
mP.gravity = mP.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK
| Gravity.CENTER_HORIZONTAL;