初识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的步骤
-
定义菜单资源文件
在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上并显示文本,如果空间不足则文本可能显示不全或不显示> -
在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的步骤
- 设置使用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))); //添加第二个标签页
}
}
- 添加多个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);
}
});
}
}