Android(安卓)5.X的新特性实例
16lz
2021-01-26
导语
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戳这里(我的博客导航)
更多相关文章
- activity跳转黑屏但不透明桌面问题
- Android(安卓)自定义码表图
- Android游戏设计中的音频控制——音量调整
- android网卡调试命令
- Animation介绍
- Android使用ValueAnimator开发仿余额宝数值增加控件
- TypedArray和attrs.xml
- Android5.0 设置wifi页面的修改
- Android(安卓)SDK Manager 代理服务器设置