Android移动应用开发-菜单与对话框设计_第1页
Android移动应用开发-菜单与对话框设计_第2页
Android移动应用开发-菜单与对话框设计_第3页
Android移动应用开发-菜单与对话框设计_第4页
Android移动应用开发-菜单与对话框设计_第5页
已阅读5页,还剩54页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android移动应用开发

010302040706认识Android列表与适配器菜单与对话框设计UI控件设计设计用户界面创建Android项目Android本地存储书目录140911BroadcastReceiver与广播通信Service与后台服务设计ContentProvider与应用间数据共享网络连接与管理05Activity与Fragment08131210线程间的通信与异步机制Android性能分析与测试

菜单与对话框设计章目录7.1菜单设计7.2对话框设计7.3应用栏设计7.1.1初识菜单选项菜单选项菜单(OptionsMenu)是Activity的主菜单项,放置对应用产生全局影响的操作,如“搜索”“设置”等。选项菜单放置在应用栏的右上角,如图所示。上下文菜单上下文菜单(ContextMenu)是用户长按某一元素时出现的浮动菜单。它提供的操作将影响所选内容或上下文框架,如图所示。上下文菜单选项菜单示例上下文菜单示例7.1.1初识菜单侧滑菜单侧滑菜单(SlideMenu)是由

com.google.android.material.navigation

包提供的

NavigationView控件实现的菜单,如图所示。动作菜单动作菜单(ActionMenu)在屏幕顶部栏显示影响所选内容的操作项目,并允许用户选择多项,如图所示。侧滑菜单示例动作菜单示例7.1.1初识菜单弹出菜单弹出菜单(PopupMenu)以垂直列表形式显示一系列项目,并且该列表会固定到调用该菜单的视图中。它特别适用于提供与特定内容相关的大量操作,或者为命令的另一部分提供选项。与上下文菜单不同,弹出菜单中的操作不会直接影响对应的内容。弹出菜单适用于与Activity中的内容区域相关的扩展操作,如图所示。7.1.2创建菜单资源创建菜单资源创建菜单资源的基本步骤如下。在res/menu/目录上右击,选择“New”>“MenuResourceFile”。在打开的对话框中输入菜单资源的名称。在Design视图中,拖曳菜单元素到界面,并在“Properties”窗格中设置菜单属性,如图所示。7.1.2创建菜单资源使用菜单资源是一种很好的做法,它具有如下优点。将菜单内容与应用的行为代码分离。B允许利用应用资源框架,为不同的平台版本、屏幕尺寸和其他配置创建备用菜单配置。C更易于使用XML可视化菜单结构。A7.1.2创建菜单资源菜单资源的组成下面是通过向导创建NavigationDrawerActivity自动生成的菜单资源。<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android="/apk/res/android"><groupandroid:checkableBehavior="single"><itemandroid:id="@+id/nav_camera"android:icon="@mipmap/ic_menu_camera"android:title="Import"/><itemandroid:id="@+id/nav_gallery"android:icon="@mipmap/ic_menu_gallery"android:title="Gallery"/><itemandroid:id="@+id/nav_slideshow"android:icon="@mipmap/ic_menu_slideshow"android:title="Slideshow"/><itemandroid:id="@+id/nav_manage"android:icon="@mipmap/ic_menu_manage"android:title="Tools"/></group><itemandroid:title="Communicate"><menu><itemandroid:id="@+id/nav_share"android:icon="@mipmap/ic_menu_share"android:title="Share"/><itemandroid:id="@+id/nav_send"android:icon="@mipmap/ic_menu_send"android:title="Send"/></menu></item></menu>7.1.2创建菜单资源(1)<item>标签<item>标签定义一个菜单项,可以包含一个<menu>标签。<item>标签必须为<menu>或<group>标签的子标签。<item>标签的属性包括以下几项。android:idandroid:iconandroid:titleandroid:showAsActionifRoomneveralwayswithTextcollapseActionView<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android="/apk/res/android"><itemandroid:id="@+id/file"android:title="@string/file"><!--"file"submenu--><menu><itemandroid:id="@+id/create_new"android:title="@string/create_new"/><itemandroid:id="@+id/open"android:title="@string/open"/></menu></item></menu>7.1.2创建菜单资源(2)<group>标签<group>标签定义一个菜单组,相同的菜单组可以一起设置其属性。<group>标签的属性说明如下。android:id:唯一标识该菜单组的引用ID。android:menuCategory:对菜单进行分类,定义菜单的优先级。android:orderInCategory:设置菜单项的优先级(取值一般是100的整数倍)。数值越大,优先级越低。android:checkableBehavior:菜单项的选择模式。android:visible:菜单组是否可见。android:enabled:菜单组是否可用。7.1.3设计选项菜单创建选项菜单的一般步骤如下。在res/menu中创建和编辑menu.xml。在当前的Activity中加载菜单资源文件。@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//加载菜单xml资源getMenuInflater().inflate(R.menu.main,menu);returntrue;}通过onOptionsItemSelected()回调方法捕捉菜单触发事件。@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//处理菜单项的点击事件(含主页和返回事件)intid=item.getItemId();//匹配菜单IDif(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}7.1.3设计选项菜单通过onPrepareOptionsMenu()方法更改MenuItems的属性(可选)。@OverridepublicbooleanonPrepareOptionsMenu(Menumenu){super.onPrepareOptionsMenu(menu);intidx=myListView.getSelectedItemPosition();//通过addingNew的判断来确定REMOVE_TODO的text的值StringremoveTitle=getString(addingNew?R.string.cancel:R.string.remove);MenuItemremoveItem=menu.findItem(REMOVE_TODO);removeItem.setTitle(removeTitle);//只有在添加或ListView被选中的情况下REMOVE_TODO菜单项才可见removeItem.setVisible(addingNew||idx>-1);returntrue;}7.1.3设计选项菜单也可以在Java中动态添加菜单,例如:@OverridepublicbooleanonCreateOptionsMenu(Menumenu){super.onCreateOptionsMenu(menu);MenuItemitemAdd=menu.add(0,ADD_NEW_TODO,Menu.NONE,R.string.add_new);MenuItemitemRem=menu.add(0,REMOVE_TODO,Menu.NONE,R.string.remove);itemAdd.setIcon(R.drawable.add_new_item);itemRem.setIcon(R.drawable.remove_item);itemAdd.setShortcut('0','a');itemRem.setShortcut('1','r');returntrue;}7.1.4设计侧滑菜单NavigationView是一个导航菜单框架,其使用菜单资源填充数据。NavigationView的典型用途就是配合androidx.drawerlayout.widget包的DrawerLayout实现抽屉式侧滑,它作为其中的Drawer部分,即导航菜单的本体部分。<?xmlversion="1.0"encoding="utf-8"?><androidx.drawerlayout.widget.DrawerLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"tools:openDrawer="start">7.1.4设计侧滑菜单DrawerLayout一般作为根布局,否则可能会出现触摸事件被屏蔽的问题。Activity中可以用setNavigationItemSelectedListener()方法来设置当菜单项被单击时的回调。<com.google.android.material.navigation.NavigationViewandroid:id="@+id/nav_view"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"android:fitsSystemWindows="true"app:headerLayout="@layout/nav_header_main3"app:menu="@menu/activity_main_drawer"/><includelayout="@layout/app_bar_main"android:layout_width="match_parent"android:layout_height="match_parent"/></androidx.drawerlayout.widget.DrawerLayout>7.1.4设计侧滑菜单在基于Jetpack框架的应用中,常用如下的格式响应菜单事件。DrawerLayoutdrawer=findViewById(R.id.drawer_layout);NavigationViewnavigationView=findViewById(R.id.nav_view);//传递一组菜单IDmAppBarConfiguration=newAppBarConfiguration.Builder(R.id.nav_home,R.id.nav_gallery,R.id.nav_slideshow,R.id.nav_tools,R.id.nav_share,R.id.nav_send).setDrawerLayout(drawer).build();NavControllernavController=Navigation.findNavController(this,R.id.nav_host_fragment);NavigationUI.setupActionBarWithNavController(this,navController,mAppBarConfiguration);NavigationUI.setupWithNavController(navigationView,navController);任务7.1设计音乐播放器菜单【任务介绍】1.任务描述在第6章任务6.1的基础上,实现左侧侧滑菜单、右上角选项菜单、长按的动作菜单。2.运行结果本任务运行结果如图7-8和图7-9所示。音乐播放器列表子项菜单运行结果音乐播放器侧滑菜单运行结果章目录7.1菜单设计7.2对话框设计7.3应用栏设计7.2.1消息设计Toast是一个简单的弹出式消息提示框,适用于确定用户正在关注屏幕时显示简短消息它只占用消息所需的空间,用户当前的Activity仍然是可见且能够操作的。该消息提示框自动地淡入/淡出,不接受交互事件。图中展示了Toast设计效果。一般使用Toast.makeText()方法来实例化一个Toast对象。例如:Toast.makeText(getApplicationContext(),"Toastmessage!",Toast.LENGTH_SHORT).show();Snackbar是com.google.android.material.snackbar包中的一个控件,可以在屏幕底部快速弹出消息,比Toast更加灵活。7.2.1消息设计使用Snackbar时需要添加如下的依赖。implementation'com.google.android.material.snackbar.Snackbar:1.0.0-rc01'Snackbar基本语法如下。Snackbar.make(view,message,duration).setAction(actionmessage,clicklistener).show();Snackbar具有以下特点。一小段时间之后或者用户与屏幕触发交互,Snackbar会自动消失。Snackbar可以包含一个可选的操作。把Snackbar划出屏幕,即可弃用。作为一条上下文敏感的消息,Snackbar也是UI的一部分,并在屏幕内所有元素的上层显示,而不是像Toast一样位于屏幕中央。一个时刻只能有唯一的Snackbar显示。7.2.1消息设计Snackbar设计效果如图所示。Snackbar.make(coordinatorLayout,"这是massage",Snackbar.LENGTH_LONG).setAction("这是action",newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Toast.makeText(MainActivity.this,"message",Toast.LENGTH_SHORT).show();}}).show();示例如下。7.2.2对话框设计AlertDialogAlertDialog是Dialog的一个扩展,它能够创建常见的对话框,如图7-12所示。常见对话框示例7.2.2对话框设计下面的代码演示了使用AlertDialog.Builder()方法创建带两个按钮的AlertDialog的设计方法。常见对话框示例AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("Title").setMessage("Writeyourmessagehere.").setCancelable(false).setPositiveButton("YES",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){/*点击“YES”按钮时的事件处理*/}}).setNegativeButton("NO",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){dialog.cancel();}});AlertDialogalert=builder.create();7.2.2对话框设计带两个按钮的AlertDialog的显示效果如图所示。AlertDialog.Builder中的重要方法如下。setTitle()setIcon()setMessage()setView()setItems()setMultiChoiceItems()setNeutralButton()setPositiveButton()setNegativeButton()create()show()7.2.2对话框设计下面的示例用setView()方法创建一个自定义AlertDialog。LayoutInflaterfactory=LayoutInflater.from(this);finalViewtextEntryView=factory.inflate(R.layout.alert_dialog_text_entry,null);AlertDialog.BuilderalertDialog=newAlertDialog.Builder(this);alertDialog.setTitle("Android提示");alertDialog.setView(textEntryView);alertDialog.setPositiveButton("OK",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){}});alertDialog.setNegativeButton("Cancel",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){}});alertDialog.show();自定义AlertDialog的显示效果如图所示。7.2.2对话框设计ProgressDialogProgressDialog是AlertDialog的扩展,它可以显示一个进度的动画——圆形进度条或长形进度条。ProgressDialog主要包括以下几个方法。setProgressStyle()setIndeterminate()setCancelable()setButton()show()cancel()dismiss()setProgress()7.2.2对话框设计例如:ProgressDialogloading=newProgressDialog(getContext());loading.setCancelable(true);loading.setMessage("Preparingtodownload…");loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);loading.show();显示效果如左图和右图所示。7.2.2对话框设计进度对话框的默认样式为圆形进度条。privatevoidshowProgressDialog(){ProgressDialogmProgressDialog=newProgressDialog(ProgressDialogActivity.this);mProgressDialog.setIcon(R.mipmap.ic_launcher);mProgressDialog.setTitle("DownloadGoingOn");mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);mProgressDialog.setMax(MAX_PROGRESS);mProgressDialog.setButton("Hide",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){}});mProgressDialog.setButton2("cancel",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){}});7.2.2对话框设计mProgressHandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){super.handleMessage(msg);if(mProgress>=MAX_PROGRESS){mProgressDialog.dismiss();}else{mProgress++;mProgressDialog.incrementProgressBy(1);mProgressHandler.sendEmptyMessageDelayed(0,100);}}};mProgress=0;mProgressDialog.setProgress(0);mProgressHandler.sendEmptyMessage(0);mProgressDialog.show();}7.2.3通知设计通知的构成一个通知包括如下内容(见右图)。通知是可以在应用的常规UI外部向用户显示的消息。通知提示如左图所示。7.2.3通知设计创建通知创建通知的基本步骤如下。添加支持库,代码如下。implementation"com.android.support:support-compat:28.0.0"创建一个NotificationCompat的Builder构造类。例如:NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this,CHANNEL_ID).setSmallIcon(R.drawable.notification_icon).setContentTitle(textTitle).setContentText(textContent).setPriority(NotificationCompat.PRIORITY_DEFAULT);7.2.3通知设计定义通知的单击事件。//创建一个显示IntentIntentintent=newIntent(this,AlertDetails.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);PendingIntentpendingIntent=PendingIntent.getActivity(this,0,intent,0);NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this,CHANNEL_ID).setSmallIcon(R.drawable.notification_icon).setContentTitle("Mynotification").setContentText("HelloWorld!").setPriority(NotificationCompat.PRIORITY_DEFAULT)//设置响应处理Intent.setContentIntent(pendingIntent).setAutoCancel(true);7.2.3通知设计显示通知,调用

NotificationManagerCompat.notify()通知,并将通知的唯一

ID

和NotificationCompat.Builder.build()通知的结果传递给它。例如:NotificationManagerCompatnotificationManager=NotificationManagerCompat.from(this);//notificationId必须是唯一的notificationManager.notify(notificationId,builder.build());响应通知虽然通知操作都是可选的,但是至少应向通知添加一个操作。一个通知可以提供多个操作。在通知内部,操作本身由PendingIntent定义,PendingIntent包含在应用中启动Activity的Intent。7.2.3通知设计例如:IntentsnoozeIntent=newIntent(this,MyBroadcastReceiver.class);snoozeIntent.setAction(ACTION_SNOOZE);snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID,0);PendingIntentsnoozePendingIntent=PendingIntent.getBroadcast(this,0,snoozeIntent,0);NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this,CHANNEL_ID).setSmallIcon(R.drawable.notification_icon).setContentTitle("Mynotification").setContentText("HelloWorld!").setPriority(NotificationCompat.PRIORITY_DEFAULT).setContentIntent(pendingIntent).addAction(R.drawable.ic_snooze,getString(R.string.snooze),snoozePendingIntent);7.2.3通知设计例如,用户可以通过直接回复操作在通知中回复短信或更新任务列表。直接回复操作在通知中显示为一个额外按钮,可打开文本输入。用户完成输入后,系统会将文本回复附加到为通知操作指定的Intent,然后将Intent发送给指定的应用。首先创建RemoteInput.Builder的实例以便添加到通知操作。手持式设备应用使用该键检索输入的文本。代码如下。//定义传递字符串信息的键privatestaticfinalStringKEY_TEXT_REPLY="key_text_reply";StringreplyLabel=getResources().getString(R.string.reply_label);RemoteInputremoteInput=newRemoteInput.Builder(KEY_TEXT_REPLY).setLabel(replyLabel).build();7.2.3通知设计然后为直接回复操作创建PendingIntent。//构建响应的PendingIntentPendingIntentreplyPendingIntent=PendingIntent.getBroadcast(getApplicationContext(),conversation.getConversationId(),getMessageReplyIntent(conversation.getConversationId()),PendingIntent.FLAG_UPDATE_CURRENT);使用addRemoteInput()方法将RemoteInput对象附加到操作。//创建回复动作并添加远程输入NotificationCompat.Actionaction=newNotificationCompat.Action.Builder(R.drawable.ic_reply_icon,getString(R.string.label),replyPendingIntent).addRemoteInput(remoteInput).build();7.2.3通知设计最后发出通知。//构建Notification并指定动作NotificationnewMessageNotification=newNotification.Builder(context,CHANNEL_ID).setSmallIcon(R.drawable.ic_message).setContentTitle(getString(R.string.title)).setContentText(getString(R.string.content)).addAction(action).build();//发布NotificationNotificationManagerCompatnotificationManager=NotificationManagerCompat.from(this);notificationManager.notify(notificationId,newMessageNotification);7.2.3通知设计管理通知当需要为同一类型的事件多次发出同一通知时,应避免创建全新的通知,而应考虑通过更改之前通知的某些值/或为其添加某些值来更新通知。例如,Gmail通过增加未读消息计数并将每封电子邮件的摘要添加到通知,告知用户收到新的电子邮件。这被称为“堆叠”通知。需要管理接收到的通知:(1)更新通知:要将通知设置为能够更新,需要调用NotificationManager.notify()方法发出带有通知ID的通知。(2)删除通知:除非发生以下情况之一,通知被删除,否则通知仍然可见。用户单独或通过使用“全部清除”清除了该通知(如果通知可以清除)。用户单击通知,且在创建通知时调用了setAutoCancel()方法。针对特定的通知ID调用了cancel()方法。该方法会删除当前通知。调用了cancelAll()方法。章目录7.1菜单设计7.2对话框设计7.3应用栏设计7.3.1初识应用栏Toolbar是从Android5.0开始推出的一个MaterialDesign风格的应用栏控件。Toolbar不像ActionBar,一定要固定在Activity的顶部,而是可以放到界面的任意位置。除此之外,在设计Toolbar的时候,Google公司也留给开发者很多可定制修改的余地,例如以下几项。设置导航栏图标。设置App的标志。支持设置标题和子标题。支持添加一个或多个自定义控件。支持动作菜单。应用栏设计效果如图所示。7.3.2创建应用栏在app/build.gradle中添加支持包依赖。使用Toolbar创建应用栏的基本步骤如下。implementation'androidx.appcompat:appcompat:1.0.2'确保Activity可以扩展AppCompatActivity。publicclassMainActivityextendsAppCompatActivity{…}在AndroidManifest清单中,在<activity>标签中设置一个使用AppCompat的AppTheme.NoActionBar主题。<activityandroid:name=".MainActivity"android:label="@string/app_name"android:theme="@style/AppTheme.NoActionBar"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>7.3.2创建应用栏其中的样式定义如下。<stylename="AppTheme.NoActionBar"><itemname="windowActionBar">false</item><itemname="windowNoTitle">true</item></style>向Activity的布局添加一个Toolbar。例如:<?xmlversion="1.0"encoding="utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">7.3.2创建应用栏@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbartoolbar=(Toolbar)findViewById(R.id.toolbar);setSupportActionBar(toolbar);}在Activity的onCreate()方法中,调用Activity的setSupportActionBar()方法,该方法会将工具栏设置为Activity的应用栏。例如:<com.google.android.material.appbar.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay"/></com.google.android.material.appbar.AppBarLayout><includelayout="@layout/content_main"/></androidx.coordinatorlayout.widget.CoordinatorLayout>7.3.3设置应用栏应用程序图标导航应用程序图标默认出现在应用栏的左侧。通常的行为是在用户单击图标时,让应用程序回到父级Activity或者回到初始状态。例如:@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_my_child);//my_child_toolbar定义在布局文件中ToolbarmyChildToolbar=(Toolbar)findViewById(R.id.my_child_toolbar);setSupportActionBar(myChildToolbar);//初始化动作栏ActionBarab=getSupportActionBar();//添加返回导航按钮ab.setDisplayHomeAsUpEnabled(true);}7.3.3设置应用栏setDisplayHomeAsUpEnabled()方法将为应用程序图标增加一个表示向上一层动作的箭头。注意:如果要实现返回功能,还需要对Activity设置父Activity。例如:<application…>…<!--Themain/homeactivity(ithasnoparentactivity)--><activityandroid:name="com.example.myfirstapp.MainActivity"…>…</activity><!--Achildofthemainactivity--><activityandroid:name="com.example.myfirstapp.MyChildActivity"android:label="@string/title_activity_child"android:parentActivityName="com.example.myfirstapp.MainActivity"><!--Parentactivitymeta-datatosupport4.0andlower--><meta-dataandroid:name="android.support.PARENT_ACTIVITY"android:value="com.example.myfirstapp.MainActivity"/></activity></application>7.3.3设置应用栏例如,下面是一个onOptionsItemSelected()方法的实现,它将返回HomeActivity用户界面。@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseandroid.R.id.home://为动作栏中的图标设置返回主屏Intent响应Intentintent=newIntent(this,HomeActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);returntrue;default:returnsuper.onOptionsItemSelected(item);}}7.3.3设置应用栏添加SearchView应用栏常见的设置是添加一个SearchView,即搜索文本框。SearchView设计效果如图所示。首先在菜单资源中添加一个菜单项。<itemandroid:id="@+id/action_search"android:icon="@android:drawable/ic_menu_search"android:title="搜索"app:showAsAction="ifRoom|collapseActionView"app:actionViewClass="androidx.appcompat.widget.SearchView"/>然后就可以在onCreateOptionsMenu()回调方法中获取该菜单的SearchView实例,并通过该实例设置回车查询监听。7.3.3设置应用栏代码如下。@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//为动作栏加载菜单资源getMenuInflater().inflate(R.menu.menu_main,menu);MenuItemsearchItem=menu.findItem(R.id.action_search);SearchViewsearchView=(SearchView)MenuItemCompat.getActionView(searchItem);searchView.setOnQueryTextListener(this);returntrue;}7.3.3设置应用栏添加ShareActionProvider分享应用ActionProvider设计效果如图所示。设计ActionProvider的一般步骤如下。在菜单资源的<item>标签中加入android:actionProviderClass="android.widget.ShareActionProvider"属性获取ShareActionProvider的实例调用setShareIntent()方法更新ActionProvider7.3.4CoordinatorLayout+AppBarLayout应用在使用CoordinatorLayout时,一般将CoordinatorLayout作为顶层布局,通过协调调度子布局的形式实现动画效果。AppBarLayout是一个垂直的LinearLayout,实现了MaterialDesign中AppBar的ScrollingGestures特性。实际中,常用CoordinatorLayout+AppBarLayout来实现滚动的、可伸缩的应用栏界面。CoordinatorLayout+AppBarLayout设计效果如图所示。AppBarLayout

只有作为CoordinatorLayout

的直接子

View

时才能正常工作。7.3.4CoordinatorLayout+AppBarLayout应用下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论