使用Activity做弹窗

弹窗的实现形式有很多种,eg:Dialog、PopupWindow等。
今天跟大家写一个使用Activity实现的弹窗。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="280dp"
              android:layout_height="190dp"
              android:background="@drawable/shape_avatar_change_bg"
              android:orientation="vertical"
              android:weightSum="14">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:gravity="center"
        android:text="@string/changeAvatar"
        android:textColor="@color/status_color"
        android:textSize="16sp"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/status_color"/>

    <TextView
        android:id="@+id/tv_take_photo"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        android:background="@drawable/seletor_bg_setting_item"
        android:gravity="center"
        android:text="@string/takePhoto"
        android:textColor="@color/light_black_color"
        android:textSize="16sp"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/layout_divider_color"/>

    <TextView
        android:id="@+id/tv_chose_gallery"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        android:background="@drawable/seletor_bg_setting_item"
        android:gravity="center"
        android:text="@string/choseFromGallery"
        android:textColor="@color/light_black_color"
        android:textSize="16sp"/>
</LinearLayout>

跟一般的activity布局一样,唯一的区别就是需要写死根布局的宽高,嗯……我还没有找到更优雅的写法……

Activity:

public class ChangeAvatarActivity extends Activity {

    private static int CAMERA_REQUEST_CODE = 1;
    private static int GALLERY_REQUEST_CODE = 2;
    private static int CROP_REQUEST_CODE = 3;

    private TextView tvFromGallery;
    private TextView tvTakePhoto;
    private File img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.avatar_revise_activity);

        initViews();
    }

    private void initViews() {
        tvTakePhoto = (TextView) findViewById(R.id.tv_take_photo);
        tvFromGallery = (TextView) findViewById(R.id.tv_chose_gallery);

        //拍照
        tvTakePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        //从相册选
        tvFromGallery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        finish();//点击窗口外部区域 弹窗消失
        return true;
    }

}

这里点击外部区域 弹窗消失 写的比较粗暴…… 但是因为给需要点击的区域加了点击事件 所以不会有影响。

下面关键的部分来了:
在 manifest文件中

<activity
     android:name=".activity.ChangeAvatarActivity"
     android:theme="@style/MyDialogActivityStyle"/>

style:

  <style name="MyDialogActivityStyle">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

解释一下:

<item name="android:windowBackground">@android:color/transparent</item>
  • 设置背景色
<item name="android:windowFrame">@null</item>
  • 设置windowFrame框 这里不显示
<item name="android:windowIsFloating">true</item>
  • 是否浮现在activity之上(底部的activity)
<item name="android:windowIsTranslucent">true</item>
  • 窗口是否半透明 配合背景色使用
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
  • 窗口弹出样式
<item name="android:backgroundDimEnabled">true</item>
  • 是否设置背景模糊
<item name="android:windowContentOverlay">@null</item>

*弹窗是否有遮盖 不设置的话有可能会出现边界黑线

有问题欢迎留言提出,之后会用这种方法 写一个更换头像的demo 请看后边的博文

要demo的请加扣扣群:
454430053 找管理员 漫步

转载于:https://www.cnblogs.com/codenoodles/p/6421161.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值