Android实现CSDNapp暗黑模式下的ActionBar—新手也能看懂(2020-6-22)

Android实现CSDNapp暗黑模式下的ActionBar—新手也能看懂

今天刚接触Android的ActionBar了解了其基本属性,下面做一下分享
显示和隐藏
添加Action Item
添加Action View
实战:
CSDN原图:
在这里插入图片描述
实现图:(轻喷,本人新手)
在这里插入图片描述

显示和隐藏

Android3.0(API 11)以上默认显示
1、在布局文件中设置
2、在Java代码中设置
(1)、获取ActionBar对象 通过 getSupporActionBar()
ActionBar bar=getSupporActionBar();
(2)、隐藏 bar.hide(); 显示 bar.show();
添加Action Item
步骤
1、定义菜单资源文件
在res节点下新建menu文件夹,之后新建menu.xml文件

<menu> <item  > </menu>        使用<item>定义
app:showAsAction=""里的属性表示该<item>在ActionBar中的显示方式 
always始终显示在ActionBar上
never显示在溢出菜单中
 ifRoom表示如果有空间就显示在ActionBar上,否则显示在溢出菜单中

2、重写 onCreateOptiosMenu(Menu menu )方法加载菜单资源文件让其添加到Action Bar或溢出菜单中
(1)、 获得MenuInflater lnflater =getMenuInflater(); //通过该对象调用lnflater()方法加载菜单资源文件
(2)、 lnflater.lnflater(); 第一个参数指定要解析的菜单文件 第二个参数直接写menu
添加Action View
与Action Item差不多,在Action Item步骤1的基础上加上如下属性
app:actionViewClass=“android.support.v7.widget.SearchView”

实战:
暗黑模式CSDNapp的ActionBar

<menu>资源文件
<?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">
    <item    android:id="@+id/search"
        android:title="搜索"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="always"
        
        />
<item
    android:id="@+id/item5"
         android:title="扫一扫"
         app:showAsAction="never"
    android:icon="@mipmap/i2"
    />
    <item
        android:id="@+id/item1"
        android:title="写Blink"
        app:showAsAction="never"
        android:icon="@mipmap/i3"
        />
    <item
        android:id="@+id/item2"
        android:title="任务"
        app:showAsAction="never"
        android:icon="@mipmap/i4"
        />
    <item
        android:id="@+id/item3"
        android:title="签到"
        app:showAsAction="never"
        android:icon="@mipmap/i5"
        />
    <item
        android:id="@+id/item4"
        android:title="写博客"
        app:showAsAction="never"
        android:icon="@mipmap/i1"
        />

</menu>

MytabListener类 实现androidx.appcompat.app.ActionBar.TabListener接口
重写其里面的方法实现,对各Tab进行切换 ,具体请看代码

package com.example.test;
import android.app.Activity;
import androidx.fragment.app.Fragment;

//该类实现各标签的切换
public class MytabListener implements androidx.appcompat.app.ActionBar.TabListener {
     private final Activity activity;       //用于指定要加载fragment的Activity
     private  final Class aClass;         //用于指定要加载fragment的类
     private Fragment fragment;           //定义fragment对象      注意导入的包

    public MytabListener(Activity activity, Class aClass) {    //构造方法
        this.activity = activity;
        this.aClass = aClass;
    }

    @Override
    public void onTabSelected(androidx.appcompat.app.ActionBar.Tab tab, androidx.fragment.app.FragmentTransaction ft) {   //选中时
        if(fragment==null){
            fragment=Fragment.instantiate(activity,aClass.getName());    // 创建fragment对象
            ft.add(android.R.id.content,fragment,null);
        }
        ft.attach(fragment);   //通过attach()方法显示新页面
    }

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

    }
}

MainActivity类,主要实现加载菜单项、与实现监听等

package com.example.test;

import android.app.ActionBar.TabListener;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.menu.MenuBuilder;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SearchView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    @SuppressLint("RestrictedApi")
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater lnflater =getMenuInflater();  ////获得,通过该对象调用lnflater()方法加载菜单资源文件
        lnflater.inflate(R.menu.menu,menu); //第一个参数指定要解析的菜单文件  第二个参数直接写menu
        if(menu instanceof MenuBuilder){
            MenuBuilder m = (MenuBuilder) menu;

            m.setOptionalIconsVisible(true);     //noinspection RestrictedApi
        }
        MenuItem searchItem = menu.findItem(R.id.search);
        SearchView searchView =  (SearchView)searchItem.getActionView();
        searchView.setQueryHint("搜索博文/帖子/用户");
        searchView.setIconifiedByDefault(false);

        return super.onCreateOptionsMenu(menu);
    }


    //重写onOptionsItemSelected(@NonNull MenuItem item) 对菜单进行监听
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {    //对菜单进行监听
      switch (item.getItemId()) {  //利用MenuItem item的getItemId()方法 获取点了那个id
             case R.id.item1:
              {Toast.makeText(this,"点击了写Blink",Toast.LENGTH_LONG).show(); break;
}
          case R.id.item2:
              {Toast.makeText(this,"点击了任务",Toast.LENGTH_LONG).show();break;
}
          case R.id.item3:
              {Toast.makeText(this,"点击了签到",Toast.LENGTH_LONG).show();break;
}
          case R.id.item4:
              {Toast.makeText(this,"点击了写博客",Toast.LENGTH_LONG).show();break;
}
          case R.id.item5:
              {Toast.makeText(this,"点击了扫一扫",Toast.LENGTH_LONG).show();break;
}
      }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar =getSupportActionBar();   //获得ActionBar对象

        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  //设置其为选项卡模式
        getSupportActionBar().setDisplayShowTitleEnabled(false);
      //添加Tab
        //可以选择跳到不同的fragment1,这里只做演示,均跳到同一个
       actionBar.addTab(actionBar.newTab().setText("关注").setTabListener(new MytabListener(this,fragment1.class)));

        actionBar.addTab(actionBar.newTab().setText("推荐").setTabListener(new MytabListener(this,fragment1.class)));

        actionBar.addTab(actionBar.newTab().setText("视频").setTabListener(new MytabListener(this,fragment1.class)));

        actionBar.addTab(actionBar.newTab().setText("热榜").setTabListener(new MytabListener(this,fragment1.class)));

        actionBar.addTab(actionBar.newTab().setText("精读").setTabListener(new MytabListener(this,fragment1.class)));
    }

}

fragment1类是点击Tab跳转的页面(不是本次内容,只做简单介绍)

package com.example.test;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44758662/article/details/106910914