ActionBar

来源:互联网 发布:js面向对象什么意思 编辑:程序博客网 时间:2024/06/05 19:52
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:是否带上文字

        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;


0 0
原创粉丝点击