开发者社区> 王亟亟> 正文

Android PopupWindow实现,类似于iOS的选择栏

简介:
+关注继续查看

转载请注明出处:王亟亟的大牛之路

以前项目中也做过类似的东西,今天想到就写一篇关于这样的东西了,外面这一类的实现也很多,都可以借鉴,但是,谢了也就写了,嗯!!
项目结构:
这里写图片描述

运行效果
这里写图片描述

完成了布局的圆角,弹出弹出的动画以及一系列监听事件

主Activity

public class MainActivity extends Activity implements OnClickListener{
    Button showPopupWindow;
    TextView mServerLogin;
    TextView mSmsLogin;
    TextView mSmsCancel;
    View root;
    private PopupWindow popupWindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showPopupWindow=(Button)findViewById(R.id.showPopupWindow);
        showPopupWindow.setOnClickListener(this);
     // 父窗口view
        root = findViewById(R.id.root);
        //初始化
        initPopupWindow();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.showPopupWindow:
                popupWindow.showAtLocation(root, Gravity.BOTTOM, 0, 0);
            break;
            case R.id.mServerLogin:
                Toast.makeText(MainActivity.this, "登录", Toast.LENGTH_SHORT).show();
                break;
            case R.id.mSmsLogin:
                Toast.makeText(MainActivity.this, "注册", Toast.LENGTH_SHORT).show();
                break;
            case R.id.mSmsCancel:
                if (popupWindow.isShowing())
                    popupWindow.dismiss();
                break;
        default:
            break;
        }
    }

    public void initPopupWindow(){
        View view=getLayoutInflater().inflate(R.layout.dialog, null);
        mServerLogin = (TextView) view.findViewById(R.id.mServerLogin);
        mSmsLogin = (TextView) view.findViewById(R.id.mSmsLogin);
        mSmsCancel= (TextView) view.findViewById(R.id.mSmsCancel);
        mServerLogin.setOnClickListener(this);
        mSmsLogin.setOnClickListener(this);
        mSmsCancel.setOnClickListener(this);
        // 全屏显示,将内容设置在底部
        popupWindow = new PopupWindow(view,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        popupWindow.setOutsideTouchable(false);
        popupWindow.setFocusable(true);
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setAnimationStyle(R.style.pop_animation);
    }
}

主布局文件

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.wjj.popupwindowdemo.MainActivity" 
    android:id="@+id/root"
    android:background="#DEB887">

    <Button
        android:id="@+id/showPopupWindow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="showPopupWindow" 
        android:background="#40E0D0"/>
</LinearLayout>

弹出内容的布局:

<?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:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:orientation="vertical" 
            android:background="@drawable/shape">

            <TextView
                android:id="@+id/mServerLogin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:paddingBottom="8dp"
                android:paddingTop="8dp"
                android:text="登陆"
                android:textColor="#3995e1"
                android:textSize="16sp" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0.5dp"
                android:background="#999999" >
            </LinearLayout>

            <TextView
                android:id="@+id/mSmsLogin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:paddingBottom="8dp"
                android:paddingTop="8dp"
                android:text="注册"
                android:textColor="#3995e1"
                android:textSize="16sp" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0.5dp"
                android:background="#999999" >
            </LinearLayout>

            <TextView
                android:id="@+id/mSmsCancel"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:paddingBottom="8dp"
                android:paddingTop="8dp"
                android:text="取消"
                android:textColor="#3995e1"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

圆角的shape:xml

  <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="rectangle" >
      <!-- 填充的颜色 -->
      <solid android:color="@color/white" />
      <!-- 设置矩形的四个角为弧形 -->
      <!-- android:radius 弧形的半径 -->
      <corners android:radius="7dip" />
 </shape>

动画效果(显示出来)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromYDelta="100%p"
        android:toYDelta="0" 
        android:duration="300"
        />
    <alpha
        android:fromAlpha="0.7"
        android:toAlpha="1.0" 
        android:duration="120"
        />  
</set>

动画效果(消失)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromYDelta="0"
        android:toYDelta="100%p" 
        android:duration="1300"
        />
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.5" 
        android:duration="800"
        />  
</set>

具体功能就看源码吧
源码地址:http://yunpan.cn/cdvQ9D772PnLd 访问密码 2112
今天写的有点累。。。。。唉。。。蛋疼。。。
顺便补充下,天津的消防员辛苦了。。唉。。。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
为什么选择Android平台来研发手机
为什么选择Android平台来研发手机 引言 这是笔者作为一个一线手机开发者对《为什么选择Android平台来研发手机》问题的思考。 一.开源 开源的手机开发平台,基于Linux操作系统。 二.开放 Android是一个开放式的移动电话开发平台,Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度; 三.免费 服务免费 四.Java语言开发 Java语言开发的优势,众所周知。
573 0
可显示Android设备选择列表,并进入指定Android设备Console的Shell脚本
      如果PC上连接多部Android设备(包括Android模拟器),在进入Console时还需要使用adb -s deviceid shell。
1100 0
Android第三方文件选择器:aFileChooser
 Android第三方文件选择器:aFileChooser aFileChooser是Android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/iPaulPro/aFileChooser aFileChooser实现了在Android平台上高度可定制化的文件选择功能,aFileChooser在自己的项目代码中使用也比较简单。
2120 0
云服务器如何选择操作系统(Linux+Window) --- 阿里云建站
如何选择适合网站的阿里云云服务器ECS操作系统,阿里云云服务器ECS的操作系统有什么区别,阿里云linux服务器和windows服务器有何不同呢?
364 0
如何选择阿里云服务器操作系统?阿里云操作系统说明文档(Linux+Window)
阿里云云服务器ECS的操作系统有什么区别,阿里云linux服务器和windows服务器有何不同呢?
273 0
云服务器linux系统与windows怎么选择?一般那种系统好?
现在的电脑技术发展很快,特别是操作系统,用不了多久就会进行更新,很多人在windows云服务器和linux系统之间不知怎么选择。下面笔者就给大家介绍windows云服务器与linux系统哪种比较好,大家应该如何选择?
453 0
+关注
王亟亟
隐藏人物
54
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载