导语

Android 5.X新特性实例。

主要内容

  • Android5.X切换动画
  • Toolbar的使用
  • 基本的Notification
  • 折叠式Notification
  • 悬挂式Notification

具体内容

效果图:

Android5.X切换动画

分别看下ActivityA和ActivityB的布局文件,注意transitionName在哪个View:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_height="match_parent">    <Button        android:layout_width="match_parent"        android:layout_height="100dp"        android:onClick="explode"        android:text="explode" />    <Button        android:layout_width="match_parent"        android:layout_height="100dp"        android:onClick="slide"        android:text="slide" />    <Button        android:layout_width="match_parent"        android:layout_height="100dp"        android:onClick="fade"        android:text="fade" />    <Button        android:layout_width="match_parent"        android:layout_height="100dp"        android:transitionName="share"        android:onClick="share"        android:text="share" />    <Button        android:id="@+id/fab_button"        android:layout_width="56dp"        android:transitionName="fab"        android:layout_height="56dp"        android:background="@drawable/ripple_round"        android:elevation="5dp"/>LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin">    <View        android:id="@+id/holder_view"        android:layout_width="match_parent"        android:layout_height="300dp"        android:transitionName="share"        android:background="?android:colorPrimary" />    <Button xmlns:android="http://schemas.android.com/apk/res/android"        android:id="@+id/fab_button"        android:transitionName="fab"        android:layout_width="56dp"        android:layout_height="56dp"        android:layout_marginRight="@dimen/activity_horizontal_margin"        android:background="@drawable/ripple_round"        android:elevation="5dp"        android:layout_below="@+id/holder_view"        android:layout_marginTop="-26dp"        android:layout_alignParentEnd="true" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:paddingTop="10dp"        android:layout_below="@id/holder_view">        <Button            android:layout_width="match_parent"            android:layout_height="60dp"            android:id="@+id/button"            android:layout_below="@+id/button4"            android:layout_marginTop="10dp" />        <Button            android:layout_width="match_parent"            android:layout_height="60dp"            android:layout_marginTop="10dp"            android:id="@+id/button4"            android:layout_alignParentStart="true" />    RelativeLayout>RelativeLayout>

分别看下ActivityA和ActivityB的Activity文件:

public class TransitionsA extends Activity {    private Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_transition);    }    // 设置不同动画效果    public void explode(View view) {        intent = new Intent(this, TransitionsB.class);        intent.putExtra("flag", 0);        startActivity(intent,                ActivityOptions.makeSceneTransitionAnimation(this)                        .toBundle());    }    // 设置不同动画效果    public void slide(View view) {        intent = new Intent(this, TransitionsB.class);        intent.putExtra("flag", 1);        startActivity(intent,                ActivityOptions.makeSceneTransitionAnimation(this)                        .toBundle());    }    // 设置不同动画效果    public void fade(View view) {        intent = new Intent(this, TransitionsB.class);        intent.putExtra("flag", 2);        startActivity(intent,                ActivityOptions.makeSceneTransitionAnimation(this)                        .toBundle());    }    // 设置不同动画效果    public void share(View view) {        View fab = findViewById(R.id.fab_button);        intent = new Intent(this, TransitionsB.class);        intent.putExtra("flag", 3);        // 创建单个共享元素//        startActivity(intent,//                ActivityOptions.makeSceneTransitionAnimation(//                        this, view, "share").toBundle());        startActivity(intent,                ActivityOptions.makeSceneTransitionAnimation(                        this,                        // 创建多个共享元素                        Pair.create(view, "share"),                        Pair.create(fab, "fab")).toBundle());    }}
public class TransitionsB extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);        int flag = getIntent().getExtras().getInt("flag");        // 设置不同的动画效果        switch (flag) {            case 0:                getWindow().setEnterTransition(new Explode());                break;            case 1:                getWindow().setEnterTransition(new Slide());                break;            case 2:                getWindow().setEnterTransition(new Fade());                getWindow().setExitTransition(new Fade());                break;            case 3:                break;        }        setContentView(R.layout.activity_transition_to);    }}

效果图:

Toolbar的使用

记得先将主题设置为NoActionBar主题,在布局中声明ToolBar:

<android.support.v7.widget.Toolbar        android:id="@+id/toolbar"        android:layout_width="match_parent"        android:layout_height="?attr/actionBarSize" />

在Menu文件夹中创建一个Menu的XML文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".MainActivity" >    <item        android:id="@+id/ab_search"        android:orderInCategory="80"        android:title="action_search"        app:actionViewClass="android.support.v7.widget.SearchView"        app:showAsAction="ifRoom"/>    <item        android:id="@+id/action_share"        android:orderInCategory="90"        android:title="action_share"        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"        app:showAsAction="ifRoom"/>    <item        android:id="@+id/action_settings"        android:orderInCategory="100"        android:title="action_settings"        app:showAsAction="never"/>menu>

在代码中使用:

public class ToolbarActivity extends AppCompatActivity {    private ShareActionProvider mShareActionProvider;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_toolbar);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        toolbar.setLogo(R.mipmap.ic_launcher);        toolbar.setTitle("主标题");        toolbar.setSubtitle("副标题");        setSupportActionBar(toolbar);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main, menu);        return super.onCreateOptionsMenu(menu);    }}

效果图:

修改一下布局,实现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"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.handsome.qunyingzhuang.chapter_12.Anli02.ToolbarActivity">    <android.support.v7.widget.Toolbar        android:id="@+id/toolbar"        android:layout_width="match_parent"        android:layout_height="?attr/actionBarSize" />    <android.support.v4.widget.DrawerLayout        android:id="@+id/drawer"        android:layout_width="match_parent"        android:layout_height="match_parent">                <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:background="@android:color/holo_blue_light"            android:orientation="vertical">            <Button                android:layout_width="100dp"                android:layout_height="match_parent"                android:text="内容界面" />        LinearLayout>                <LinearLayout            android:id="@+id/drawer_view"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_gravity="start"            android:orientation="vertical">            <Button                android:layout_width="200dp"                android:layout_height="match_parent"                android:text="菜单界面" />        LinearLayout>    android.support.v4.widget.DrawerLayout>LinearLayout>

在主代码中实现:

public class ToolbarActivity extends AppCompatActivity {    private ShareActionProvider mShareActionProvider;    private DrawerLayout mDrawerLayout;    private ActionBarDrawerToggle mDrawerToggle;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_toolbar);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        toolbar.setLogo(R.mipmap.ic_launcher);        toolbar.setTitle("主标题");        toolbar.setSubtitle("副标题");        setSupportActionBar(toolbar);        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);        mDrawerToggle = new ActionBarDrawerToggle(                this, mDrawerLayout, toolbar,                R.string.abc_action_bar_home_description,                R.string.abc_action_bar_home_description_format);        mDrawerToggle.syncState();        mDrawerLayout.setDrawerListener(mDrawerToggle);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main, menu);        /* ShareActionProvider配置 */        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu                .findItem(R.id.action_share));        Intent intent = new Intent(Intent.ACTION_SEND);        intent.setType("text/*");        mShareActionProvider.setShareIntent(intent);        return super.onCreateOptionsMenu(menu);    }}

效果图:

基本的Notification

代码:

public class Notification01 extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_notification01);        //第一步:初始化        Notification.Builder builder = new Notification.Builder(this);        //第二步:构建点击之后的意图        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));        //构造pendingdintent        PendingIntent pendingIntent = PendingIntent.getActivities(this, 0, new Intent[]{intent}, 0);        //第三步:设置通知栏的各种消息        builder.setSmallIcon(R.mipmap.ic_launcher);        builder.setContentIntent(pendingIntent);        builder.setAutoCancel(true);        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));        builder.setContentText("Title");        builder.setContentText("内容");        builder.setSubText("text");        //第四步:通过NotificationManager来发出        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);        notificationManager.notify(0, builder.build());    }}

效果图:

折叠的Notification

代码:

public class Notification02 extends AppCompatActivity {    private static final int NOTIFICATION_ID_COLLAPSE = 0x01;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_notification02);        Intent intent = new Intent(Intent.ACTION_VIEW,                Uri.parse("http://www.sina.com"));        PendingIntent pendingIntent = PendingIntent.getActivity(                this, 0, intent, 0);        Notification.Builder builder = new Notification.Builder(this);        builder.setSmallIcon(R.mipmap.ic_launcher);        builder.setContentIntent(pendingIntent);        builder.setAutoCancel(true);        builder.setLargeIcon(BitmapFactory.decodeResource(                getResources(), R.mipmap.ic_launcher));        // 通过RemoteViews来创建自定义的Notification视图        RemoteViews contentView =                new RemoteViews(getPackageName(),                        R.layout.notification);        contentView.setTextViewText(R.id.textView,                "show me when collapsed");        Notification notification = builder.build();        notification.contentView = contentView;        // 通过RemoteViews来创建自定义的Notification视图        RemoteViews expandedView =                new RemoteViews(getPackageName(),                        R.layout.notification_expanded);        notification.bigContentView = expandedView;        NotificationManager nm = (NotificationManager)                getSystemService(NOTIFICATION_SERVICE);        nm.notify(NOTIFICATION_ID_COLLAPSE, notification);    }}

效果图:

悬挂式Notification

代码:

public class Notification03 extends AppCompatActivity {    private static final int NOTIFICATION_ID_HEADSUP = 0x01;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_notification03);        Notification.Builder builder = new Notification.Builder(this)                .setSmallIcon(R.mipmap.ic_launcher)                .setPriority(Notification.PRIORITY_DEFAULT)                .setCategory(Notification.CATEGORY_MESSAGE)                .setContentTitle("Headsup Notification")                .setContentText("I am a Headsup notification.");        Intent push = new Intent();        push.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        push.setClass(this, MainActivity.class);        PendingIntent pendingIntent = PendingIntent.getActivity(                this, 0, push, PendingIntent.FLAG_CANCEL_CURRENT);        builder.setContentText("Heads-Up Notification on Android 5.0")                .setFullScreenIntent(pendingIntent, true);        NotificationManager nm = (NotificationManager)                getSystemService(NOTIFICATION_SERVICE);        nm.notify(NOTIFICATION_ID_HEADSUP, builder.build());    }}

效果图:

总结

理解实例。

进入我的CSDN戳这里(我的博客导航)

更多相关文章

  1. activity跳转黑屏但不透明桌面问题
  2. Android(安卓)自定义码表图
  3. Android游戏设计中的音频控制——音量调整
  4. android网卡调试命令
  5. Animation介绍
  6. Android使用ValueAnimator开发仿余额宝数值增加控件
  7. TypedArray和attrs.xml
  8. Android5.0 设置wifi页面的修改
  9. Android(安卓)SDK Manager 代理服务器设置

随机推荐

  1. android6.0下载路径设置
  2. Android 关于WebView加载完成的多种监听
  3. android push机制-C2DM
  4. 特效--------圆角 倒影
  5. android 播放器解析MP3文件乱码分析
  6. android声音检测仪---分贝仪 (附源码)
  7. Android MediaPlayer 分析- MediaPlayerS
  8. Android制作 9-Patch图片(可调整大小的位
  9. Android NDK: WARNING: APP_PLATFORM And
  10. 类似HTML map标签功能的Android组件