您的位置:首页 > 其它

使用Activity做弹窗

2016-04-16 11:36 204 查看
弹窗的实现形式有很多种,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 找管理员 漫步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  activity 弹窗