您的位置:首页 > 移动开发 > Android开发

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

2020-07-16 05:59 1056 查看

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐