zoukankan      html  css  js  c++  java
  • android入门——UI(6)——ViewPager+Menu+PopupWindow

    一、使用ViewPager开发新特性引导界面

    <?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>
    viewpager_index.xml
    <?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>
    item_view_pager.xml
    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));
                }
            });
        }
    }
    ViewPagerDemo.java

     运行效果就是红蓝绿三页左右滑动不方便演示。具体开发时请使用好看的图片。

    二、使用Menu编写菜单,注意创建模拟器的时候在skin中设置skin with dynamic hardware controls。

    首先我们在res文件夹下创建menu文件夹,再在menu文件下创建Menu resource file

    创建xml编写菜单项

    <?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>
    main_menu.xml

    一个空壳布局文件

    <?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>
    menu_index

    主程序

    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();
            }
        }
    }
    MenuDemo.java

    注意我们写一个方法

    然后通过setIconEnable(menu,true)来为菜单添加图标

    下面的代码是弹出提示

    运行效果

    三、使用PopupWindow写弹出窗

    总体布局文件

    <?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>
    pop_window_index.xml

    弹出窗布局文件

    <?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>
    pop_window.xml

    主程序

    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);
        }
    }
    PopWindowDemo.java

    运行效果

  • 相关阅读:
    robotframework框架
    pytest系列(四)- pytest+allure+jenkins
    robotframework框架
    接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?
    selenium原理应用
    pytest系列(一):什么是单元测试界的高富帅?
    python appium搭建app自动化测试环境
    python selenium
    python3.4 + pycharm 环境安装 + pycharm使用
    requests(三):json请求中中文乱码处理
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/5805204.html
Copyright © 2011-2022 走看看