AppCompatActivity

    xiaoxiao2021-12-14  20

    AppCompatActivity介绍

    在API22之前我们使用标题栏基本都是在ActionBarActivity的Activity中处理的,而API22之后,谷歌遗弃了 ActionBarActivity,推荐我们也可以说是强制我们使用AppCompatActivity。

    AppCompatActivity与Toolbar结合

    其实我们并不是要使用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

    最新回复(0)