大家好,又见面了,我是你们的朋友全栈君。
要想将所有Activity 的Action Bar隐藏或者单独隐藏某个或某几个Activity中的Action Bar
只需要再AndroidManifest.xml中将对应的theme改成后缀为 NoActionBar, 如
<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>
但这种方式的缺陷在于, 一旦设置 , 再程序运行时不能更改 , 不能灵活的隐藏和显示 ,
可以通过
//获取当前ActionBar
actionBar = getSupportActionBar();
通过
actionBar.hide();
actionBar.show();
显示和隐藏ActionBar
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;
}
}
}
添加Action Item
- 定义菜单资源文件
- 在onCreateOptionsMenu()方法中加载菜单资源文件
要在ActionBar上添加图标, 需要先创建资源文件, 在res目录下创建menu目录
然后创建menu.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);
}
添加Action View
在item里更改 search的item
<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);
}
}
Action Bar实现层级导航, 在子页面中显示返回箭头
新建两个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>
}
}
转载于:https://my.oschina.net/lanyu96/blog/2981028
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107152.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...