Android App开发学习第8天:Action Bar

初识Action Bar

导航栏

Action Bar基本应用

显示和隐藏Action Bar
隐藏有两种方法
方法一:在AndroidManifest.xml中在指定的Activity中修改theme使得默认action bar取消

<activity android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            >

方法二:设置一个按钮,为该按钮添加单击事件实现隐藏action bar

ActionBar actionBar = getSupportActionBar();
        Button button_s = this.findViewById(R.id.btn_show);
        Button button_h = this.findViewById(R.id.btn_hide);
        button_h.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                actionBar.hide();//隐藏Action Bar
            }
        });

显示action bar ,默认是显示的
使用java代码显示

ActionBar actionBar = getSupportActionBar();
        Button button_s = this.findViewById(R.id.btn_show);
        Button button_h = this.findViewById(R.id.btn_hide);
         button_s.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                actionBar.show();//显示Action Bar

            }
        });

添加Action Item
添加Action Item的步骤

  1. 定义菜单资源文件
    在res->menu->menu.xml下定义菜单资源文件
    < menu
    <item android:id="@+id/search"
    android:icon="@drawable/search"
    android:title=“search”

    app:showAsAction=“always”
    showAsAction有以下属性:
    always:一直显示在action bar中
    ifRoom:有空间的话就显示在action bar中,没有空间就显示在溢出菜单中
    never:这个菜单项永远都不显示在action bar上
    withText:显示在action bar上并显示文本,如果空间不足则文本可能显示不全或不显示>

  2. 在onCreateOptionsMenu()方法中加载菜单资源文件

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater(); //实例化一个MenuInflater对象
        inflater.inflate(R.menu.menu,menu); //解析菜单文件
        return super.onCreateOptionsMenu(menu);
    }

添加Action View
app:actionViewClass=“android.widget.SearchView”:用于实现搜索功能。
用来实现类的
android:actionLayout属性:用来实现布局文件的

Action Bar 与Tab
实现Tab导航Action Bar的步骤

  1. 设置使用Tab导航方式
    为ActoinBar设置为选项卡模式,并将各个Tab标签页添加到ActionBar中
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //设置Action Bar为选项卡模式,并将标签页添加到Action Bar中
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        //设置ActionBar采用选项卡模式
        actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);   //隐藏标题栏
        //把各个标签页添加到Action Bar中
        actionBar.addTab(actionBar.newTab().setText("词典")
                .setTabListener( new MyTabListener(this,Fragment1.class)));  //添加第一个标签页
         actionBar.addTab(actionBar.newTab().setText("百科")
                .setTabListener( new MyTabListener(this,Fragment2.class)));  //添加第二个标签页
    }
}
  1. 添加多个Tab标签页,并为每个Tab标签页添加事件监听
    创建对应的Fragment,如
public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_1, container, false);
        return view;
    }
}

并创建对应的fragment.xml,如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@drawable/bg">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/rabbit"/>

</RelativeLayout>

创建Tab监听器,来处理选中和退出事件

/**
 * 实现各标签页的切换
 */
public class MyTabListener  implements ActionBar.TabListener {
    private Activity activity;    //用于指定要加载Fragment的Activity
    private Class aClass;   //用于指定要加载的Fragment所对应的类
    private Fragment fragment;  //定义Fragment对象

    public MyTabListener(Activity activity, Class aClass) {
        this.activity = activity;
        this.aClass = aClass;
    }

    /**
     * 被选择时
     *
     * @param tab
     * @param ft
     */
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        if (fragment == null) {
            fragment = Fragment.instantiate(activity, aClass.getName());
            ft.add(android.R.id.content, fragment, null);
        }
        ft.attach(fragment);//显示新页面
    }




    /**
     * 退出选中状态时
     *
     * @param tab
     * @param ft
     */

    @Override
    public void onTabUnselected(ActionBar.Tab tab, androidx.fragment.app.FragmentTransaction ft) {
        if (fragment != null) {
            ft.detach(fragment);        //删除旧页面
        }
    }


    @Override
    public void onTabReselected(ActionBar.Tab tab, androidx.fragment.app.FragmentTransaction ft) {

    }
}

实现层级式导航

设置导航图标显示
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
配置父Activity

  <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity"/>

创建另一个Activity,判断是否有父Activity,如果有则设置导航图标

public class FriendActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_friend);
        //判断父Activity是否为空,如果不为空则设置导航图标显示
        if (NavUtils.getParentActivityName(FriendActivity.this) !=null){
            getSupportActionBar().setDisplayHomeAsUpEnabled(true); //显示向左的箭头
        }
    }
}

在父Activity中设置点击跳转到另一个Activirty

public class MainActivity extends AppCompatActivity {
    ImageView imageView ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView= this.findViewById(R.id.imageview);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, FriendActivity.class);
                startActivity(intent);
            }
        });
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值