AppCompatActivity介绍
在API22之前我们使用标题栏基本都是在ActionBarActivity的Activity中处理的,而API22之后,谷歌遗弃了
ActionBarActivity,推荐我们也可以说是强制我们使用AppCompatActivity。
其实我们并不是要使用AppCompatActivity自带的标题栏,那样扩展会很麻烦,在14年的Android 5.0的时候就用Toolbar
替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代,那么使用方法就是引入Toolbar设置到Activity中。
实现步骤
1、让MainActivity extends AppCompatActivity
2.在布局文件中添加toolbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myappactivity.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/activity_main_toolbar"
android:layout_width="match_parent"
android:background="@color/colorPrimary"
android:layout_height="wrap_content">
</android.support.v7.widget.Toolbar>
</LinearLayout>
3.修改新创建项目时在styles.xml中定义一下AppTheme并在AndroidManifest.xml文件中指定为App的主题
(android:theme=”@style/AppTheme”),
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#4876FF</item><!--toolbar的颜色-->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item><!--标题栏上面的那个颜色-->
<item name="colorAccent">@color/colorAccent</item>
</style>
4.将Toolbar显示到界面
我们创建一个方法名为initActionBar(),首先当然是获取Toolbar控件,然后将Toolbar设置到Activity中去
public void initActionBar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
setSupportActionBar(toolbar);
}
5.设置
设置标题:
//设置标题 自带的标题没有居中显示的操作
toolbar.setTitle("小陌陌");
//设置标题的颜色
toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent));
//设置标题的位置
toolbar.setTitleMargin(53,16,16,55);
设置回退按钮:
setSupportActionBar(toolbar);后面加入如下代码:
//返回按钮的实现
toolbar.setNavigationIcon(R.drawable.title_back);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
设置logo:
toolbar.setLogo(R.id.app_logo);
设置副标题:
toolbar.setSubtitile("小陌陌");
设置菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
自己定义menu_main
可以参考: http://www.cnblogs.com/ssqqhh/p/5213331.html
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto">
<!--ifRoom表示当toolBar空间足够时,显示图标在标题栏中,否则将它隐藏到ToolBar末端的overFlow中-->
<!--always表示一直,never 从不-->
<!--表示这个菜单使用SearchView这个控件。-->
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="搜索"
yourapp:showAsAction="ifRoom" />
<item
android:id="@+id/group_chat"
android:icon="@drawable/ic_point_early_color"
android:title="发起群聊" />
<item
android:icon="@drawable/ic_point_late_color"
android:title="添加朋友"/>
<item
android:icon="@drawable/ic_point_sick_color"
android:title="首付款"/>
</menu>
运行效果
修改样式:让弹出来的menu好看
运行效果
点击事件与美化
1.自定义标题 在toolbar布局添加如下,找到布局就能设置了
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:text="www.dastorm.com"
android:textColor="@android:color/white"
android:textSize="20sp"
android:textStyle="bold" />、
2.右边图标的修改(默认是三个省略号)
//右边menu键图标的修改
toolbar.setOverflowIcon(getResources().getDrawable(R.drawable.ic_point_truancy_color));
3.通过反射 显示溢出menu的图标
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
//同样先获取到需要调用的method
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
//设为可访问
m.setAccessible(true);
//调用方法
m.invoke(menu, true);
} catch (Exception e) {
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
return super.onPrepareOptionsMenu(menu);
}
4.点击事件的处理
//设置右边的点击事件
toolbar.setOnMenuItemClickListener(this);
//菜单的点击事件
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_search:
Toast.makeText(this,"搜索事件",Toast.LENGTH_SHORT).show();
break;
case R.id.group_chat:
Toast.makeText(this,"群聊",Toast.LENGTH_SHORT).show();
break;
}
return false;
}
最终运行图:
源码:http://download.csdn.net/detail/qq_27280457/9700113
转载请注明原文地址: https://ju.6miu.com/read-965267.html