一、使用ViewPager开发新特性引导界面
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/my_view_pager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:overScrollMode="never"> </android.support.v4.view.ViewPager> </RelativeLayout>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/item_image_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ouc.wkp.ui1; import android.app.Activity; import android.graphics.Color; import android.media.Image; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; /** * Created by wkp on 2016/8/24. */ public class ViewPagerDemo extends Activity {//开发新特性引导界面 ViewPager viewPager; List<View> viewList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_index); viewPager = (ViewPager) findViewById(R.id.my_view_pager); { View view = LayoutInflater.from(this).inflate(R.layout.item_view_pager, null); ImageView imageView = (ImageView) view.findViewById(R.id.item_image_view); imageView.setBackgroundColor(Color.RED); viewList.add(view); } { View view = LayoutInflater.from(this).inflate(R.layout.item_view_pager, null); ImageView imageView = (ImageView) view.findViewById(R.id.item_image_view); imageView.setBackgroundColor(Color.GREEN); viewList.add(view); } { View view = LayoutInflater.from(this).inflate(R.layout.item_view_pager, null); ImageView imageView = (ImageView) view.findViewById(R.id.item_image_view); imageView.setBackgroundColor(Color.BLUE); viewList.add(view); } viewPager.setAdapter(new PagerAdapter() { @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } }); } }
运行效果就是红蓝绿三页左右滑动不方便演示。具体开发时请使用好看的图片。
二、使用Menu编写菜单,注意创建模拟器的时候在skin中设置skin with dynamic hardware controls。
首先我们在res文件夹下创建menu文件夹,再在menu文件下创建Menu resource file
创建xml编写菜单项
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/main_menu_1" android:icon="@drawable/menu1" android:title="菜单一"/> <item android:id="@+id/main_menu_2" android:icon="@drawable/menu2" android:title="菜单二"/> <item android:id="@+id/main_menu_3" android:icon="@drawable/menu3" android:title="菜单三"/> </menu>
一个空壳布局文件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout>
主程序
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ouc.wkp.ui1; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import java.lang.reflect.Method; /** * Created by wkp on 2016/8/24. */ public class MenuDemo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu_index); } @Override public boolean onCreateOptionsMenu(Menu menu) { // menu.add("菜单1"); // menu.add("菜单2"); // menu.add("菜单3"); // menu.add("菜单4"); setIconEnable(menu,true); new MenuInflater(this).inflate(R.menu.main_menu,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.main_menu_1: //处理第一个菜单的点击事件 Toast.makeText(this,"用户点击了"+item.getTitle(),Toast.LENGTH_SHORT).show(); break; case R.id.main_menu_2: Toast.makeText(this,"用户点击了"+item.getTitle(),Toast.LENGTH_SHORT).show(); break; case R.id.main_menu_3: Toast.makeText(this,"用户点击了"+item.getTitle(),Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); } //enable为true时,菜单添加图标有效,enable为false时无效,4.0系统默认无效 private void setIconEnable(Menu menu,boolean enable){ try{ Class<?> clazz=Class.forName("com.android.internal.view.menu.MenuBuilder"); Method m=clazz.getDeclaredMethod("setOptionalIconsVisible",boolean.class); m.setAccessible(true); //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java多态) m.invoke(menu,enable); }catch(Exception e){ e.printStackTrace(); } } }
注意我们写一个方法
然后通过setIconEnable(menu,true)来为菜单添加图标
下面的代码是弹出提示
运行效果
三、使用PopupWindow写弹出窗
总体布局文件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_pop_window" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="弹出popWindow"/> </RelativeLayout>
弹出窗布局文件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#bbbbbb"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_msg" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn_cancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消"/> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定"/> </LinearLayout> </LinearLayout>
主程序
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package com.ouc.wkp.ui1; import android.app.Activity; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; /** * Created by wkp on 2016/8/25. */ public class PopWindowDemo extends Activity{ PopupWindow popupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pop_window_index); findViewById(R.id.btn_pop_window).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //弹出 // popupWindow.showAsDropDown(view); //进行屏幕居中显示 popupWindow.showAtLocation(PopWindowDemo.this.getWindow().getDecorView(), Gravity.CENTER,0,0); } }); View view= LayoutInflater.from(this).inflate(R.layout.pop_window,null); ((TextView)view.findViewById(R.id.tv_title)).setText("标题"); ((TextView)view.findViewById(R.id.tv_msg)).setText("这里是popwindow显示的消息内容"); //点击关闭 view.findViewById(R.id.btn_ok).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(),"您点击了确定按钮",Toast.LENGTH_SHORT).show(); popupWindow.dismiss(); } }); view.findViewById(R.id.btn_cancle).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(),"您点击了取消按钮",Toast.LENGTH_SHORT).show(); popupWindow.dismiss(); } }); popupWindow=new PopupWindow(view, WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT); //点击外部消失 popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setFocusable(true); } }
运行效果