要想将全部Activity 的Action Bar隐藏或者单独隐藏某个或某几个Activity中的Action Barjava
只须要再AndroidManifest.xml中将对应的theme改为后缀为 NoActionBar, 如android
<activity android:name=".Demo01" //更改当前Activity的ActionBar为隐藏状态 android:theme="@style/Theme.AppCompat.Light.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
但这种方式的缺陷在于, 一旦设置 , 再程序运行时不能更改 , 不能灵活的隐藏和显示 ,app
能够经过 ide
//获取当前ActionBar actionBar = getSupportActionBar();
经过this
actionBar.hide(); actionBar.show();
显示和隐藏ActionBarspa
public class ActionBarDemo extends AppCompatActivity { private boolean ActionBarIsShow = true; private ActionBar actionBar; private Button actionBarBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_action_bar_demo); actionBarBtn = findViewById(R.id.actionBarBtn); //获取当前ActionBar actionBar = getSupportActionBar(); } @SuppressLint("SetTextI18n") public void showActionBar(View view) { if (ActionBarIsShow){ //隐藏ActionBar actionBar.hide(); actionBarBtn.setText("显示ActionBar"); ActionBarIsShow = false; }else { //显示ActionBar actionBar.show(); actionBarBtn.setText("隐藏ActionBar"); ActionBarIsShow = true; } } }
要在ActionBar上添加图标, 须要先建立资源文件, 在res目录下建立menu目录code
而后建立menu.xml资源文件xml
<?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:icon="@drawable/icon_search" android:title="search" app:showAsAction="always" /> <!--showAsAction 下的选项 always : 老是显示在ActionBar上--> <!--ifRoom : 当Action有可用空间时就显示在ActionBar上--> <!--没有足够空间,就显示在溢出菜单中--> <!--never : 表示菜单项永远都不显示在ActionBar上--> <!--withText: 将菜单项显示在ActionBar上,而且显示文本,--> <!--受到ActionBar空间的显示,文本可能显示不全--> <item android:id="@+id/home" android:icon="@drawable/icon_home" android:title="主页" app:showAsAction="ifRoom" /> <item android:id="@+id/setting" android:title="设置" app:showAsAction="ifRoom" /> <item android:id="@+id/about" android:title="关于" app:showAsAction="never" /> </menu>
而后在Java代码中,重写onCreateOptionsMenu方法对象
@Override public boolean onCreateOptionsMenu(Menu menu) { //实例化一个MenuInflater对象 MenuInflater inflater = getMenuInflater(); //解析菜单文件 inflater.inflate(R.menu.menu,menu); return super.onCreateOptionsMenu(menu); }
在item里更改 search的itemblog
<item android:id="@+id/search" android:icon="@drawable/icon_search" android:title="搜索" app:showAsAction="always" app:actionViewClass="android.support.v7.widget.SearchView" /> <!--添加searchView实现类(android自带)-->
这样点击搜索图标会自动弹出搜索框
响应Action按钮的点击事件, 重写onOptionsItemSelected方法
经过方法传入的MenuItem参数调用它的getItemId()方法和menu资源中的id进行比较
从而辨别出用户点击的是哪个Action按钮
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.home: Toast.makeText(this, "点击了主页按钮", Toast.LENGTH_SHORT).show(); default: return super.onOptionsItemSelected(item); } }
新建两个Acitvity Demo02和NewActivity Demo02做为主页面
在Demo02 中添加一个Button ,点击Button跳转到NewActivtiy的页面
NewActivity的源码
public class NewActivity extends AppCompatActivity { @SuppressLint("RestrictedApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new); //判断父Activity是否为空,不为空设置导航图标显示 if (NavUtils.getParentActivityName(NewActivity.this) != null) { //显示向左的箭头图标 getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); } //须要在AndroidManifest.xml文件中添加meta标签 // <activity android:name=".Demo02.NewActivity" // android:label="新页面"> // <meta-data // android:name="android.support.PARENT_ACTIVITY" // android:value=".Demo02.NewActivity" /> // 这个设置父Activity // </activity> } }