AI智能
改变未来

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\"/><itemandroid:id=\"@+id/item5\"android:title=\"扫一扫\"app:showAsAction=\"never\"android:icon=\"@mipmap/i2\"/><itemandroid:id=\"@+id/item1\"android:title=\"写Blink\"app:showAsAction=\"never\"android:icon=\"@mipmap/i3\"/><itemandroid:id=\"@+id/item2\"android:title=\"任务\"app:showAsAction=\"never\"android:icon=\"@mipmap/i4\"/><itemandroid:id=\"@+id/item3\"android:title=\"签到\"app:showAsAction=\"never\"android:icon=\"@mipmap/i5\"/><itemandroid: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的Activityprivate  final Class aClass;         //用于指定要加载fragment的类private Fragment fragment;           //定义fragment对象      注意导入的包public MytabListener(Activity activity, Class aClass) {    //构造方法this.activity = activity;this.aClass = aClass;}@Overridepublic 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()方法显示新页面}@Overridepublic void onTabUnselected(androidx.appcompat.app.ActionBar.Tab tab, androidx.fragment.app.FragmentTransaction ft) { //退出时if (fragment!=null){ft.detach(fragment);                     //删除旧业面}}@Overridepublic 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\")@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater lnflater =getMenuInflater();  ////获得,通过该对象调用lnflater()方法加载菜单资源文件lnflater.inflate(R.menu.menu,menu); //第一个参数指定要解析的菜单文件  第二个参数直接写menuif(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) 对菜单进行监听@Overridepublic boolean onOptionsItemSelected(@NonNull MenuItem item) {    //对菜单进行监听switch (item.getItemId()) {  //利用MenuItem item的getItemId()方法 获取点了那个idcase 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);}@Overrideprotected 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@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view=inflater.inflate(R.layout.fragment_1,container,false);return view;}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android实现CSDNapp暗黑模式下的ActionBar—新手也能看懂(2020-6-22)