dialog是弹出式窗口,点击后会以窗口的形式弹出

主要有添加备注,日历选择等,通过设置事件监听,将dialog弹出来

package com.example.Utils.fragment;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
import androidx.annotation.NonNull;
import com.example.Utils.R;
import com.example.Utils.adapter.CalendarAdapter;
import com.example.Utils.database.DBManager; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; public class CalendarDialog extends Dialog implements View.OnClickListener {
ImageView errorIv;
GridView gv;
LinearLayout hsvLayout; List<TextView>hsvViewList;
List<Integer>yearList; int selectPos = -1; //表示正在被点击的年份的位置
private CalendarAdapter adapter;
int selectMonth = -1; public interface OnRefreshListener{
public void onRefresh(int selPos,int year,int month);
}
OnRefreshListener onRefreshListener; public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
this.onRefreshListener = onRefreshListener;
} public CalendarDialog(@NonNull Context context, int selectPos, int selectMonth) {
super(context);
this.selectPos = selectPos;
this.selectMonth = selectMonth;
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_calendar);
gv = findViewById(R.id.dialog_calendar_gv);
errorIv = findViewById(R.id.dialog_calendar_iv);
hsvLayout = findViewById(R.id.dialog_calendar_layout);
errorIv.setOnClickListener(this);
// 向横向的ScrollView当中添加View的方法
addViewToLayout();
initGridView();
//设置GridView当中每一个item的点击事件
setGVListener();
} private void setGVListener() {
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.selPos = position;
adapter.notifyDataSetInvalidated();
int month = position + 1;
int year = adapter.year;
// 获取到被选中的年份和月份
onRefreshListener.onRefresh(selectPos,year,month);
cancel();
}
});
} private void initGridView() {
int selYear = yearList.get(selectPos);
adapter = new CalendarAdapter(getContext(), selYear);
if (selectMonth == -1) {
int month = Calendar.getInstance().get(Calendar.MONTH);
adapter.selPos = month;
}else {
adapter.selPos = selectMonth-1;
}
gv.setAdapter(adapter);
} private void addViewToLayout() {
hsvViewList = new ArrayList<>(); //将添加进入线性布局当中的TextView进行统一管理的集合
yearList = DBManager.getYearListFromAccounttb(); //获取数据库当中存储了多少个年份
//如果数据库当中没有记录,就添加今年的记录
if (yearList.size() == 0) {
int year = Calendar.getInstance().get(Calendar.YEAR);
yearList.add(year);
} //遍历年份,有几年,就向ScrollView当中添加几个view
for (int i = 0; i < yearList.size(); i++) {
int year = yearList.get(i);
View view = getLayoutInflater().inflate(R.layout.item_dialogcal_hsv, null);
hsvLayout.addView(view); //将view添加到布局当中
TextView hsvTv = view.findViewById(R.id.item_dialogcal_hsv_tv);
hsvTv.setText(year+"");
hsvViewList.add(hsvTv);
}
if (selectPos == -1) {
selectPos = hsvViewList.size()-1; //设置当前被选中的是最近的年份
}
changeTvbg(selectPos); //将最后一个设置为选中状态
setHSVClickListener(); //设置每一个View的监听事件
}
/** 给横向的ScrollView当中每一个TextView设置点击事件*/
private void setHSVClickListener() {
for (int i = 0; i < hsvViewList.size(); i++) {
TextView view = hsvViewList.get(i);
final int pos = i;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeTvbg(pos);
selectPos = pos;
// 获取被选中的年份,然后下面的GridView显示数据源会发生变化
int year = yearList.get(selectPos);
adapter.setYear(year);
}
});
}
} /** 传入被选中的位置,改变此位置上的背景和文字颜色*/
private void changeTvbg(int selectPos) {
for (int i = 0; i < hsvViewList.size(); i++) {
TextView tv = hsvViewList.get(i);
tv.setBackgroundResource(R.drawable.dialog_btn_bg);
tv.setTextColor(Color.BLACK);
} TextView selView = hsvViewList.get(selectPos);
selView.setBackgroundResource(R.drawable.main_recordbtn_bg);
selView.setTextColor(Color.WHITE);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_calendar_iv:
cancel();
break;
}
} /* 设置Dialog的尺寸和屏幕尺寸一致*/
public void setDialogSize(){
// 获取当前窗口对象
Window window = getWindow();
// 获取窗口对象的参数
WindowManager.LayoutParams wlp = window.getAttributes();
// 获取屏幕宽度
Display d = window.getWindowManager().getDefaultDisplay();
wlp.width = (int)(d.getWidth()); //对话框窗口为屏幕窗口
wlp.gravity = Gravity.TOP;
window.setBackgroundDrawableResource(android.R.color.transparent);
window.setAttributes(wlp);
}
}

Android开发-主要的dialog的更多相关文章

  1. Android 开发之自定义Dialog及UI的实现

    我们在开发中,经常会自定义Dialog,因为原生的AlertDialog无法满足我们的需求,这个时候就需要自定义Dialog,那么如何自定义呢,其实不难,就是有点繁琐而已.也就是自定义一个UI的xml ...

  2. Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)

    引言 开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息.如:用户提示.进度展示.时间设置.日期设置等. 下面我和大家一些学习下Android中常用的几种Dialog吧~ * 首 ...

  3. Android开发技巧——使用Dialog实现仿QQ的ActionSheet菜单

    最近看到有人用Dialog来实现QQ的仿ActionSheet的自定义菜单,对于自己没实现过的一些控件,看着也想实现一下.于是动手了一下,发现也不难,和大家分享一下. 本文原创,转载请注明出处:htt ...

  4. Android开发之自定义Dialog简单实现

    本文着重研究了自定义对话框,通过一下步骤即可清晰的理解原理,通过更改界面设置和style类型,可以应用在各种各样适合自己的App中. 首先来看一下效果图: 首先是activity的界面 点击了上述图片 ...

  5. Android开发之设定Dialog的位置

    今天自定义了一个对话框,但是弹出时默认是显示在屏幕中间.主要代码:menuDialog = new AlertDialog.Builder(this).create();                ...

  6. Android开发技巧——实现可复用的ActionSheet菜单

    在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...

  7. Android开发实战之底部Dialog弹出效果

    在Android开发中,有很多情况下我们需要使用到对话框,遗憾的是,安卓自带的对话框样式不能满足我们实际的需要,所以往往需要我们自定义对话框,具体做法:写一个对话框继承自Dialog实现他的一个构造方 ...

  8. Android开发:使用DialogFragment实现dialog自定义布局

    使用DialogFragment实现dialog的自定义布局最大的好处是可以更好控制dialog的生命周期. TestFragment的代码: public class TestFragment ex ...

  9. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

随机推荐

  1. 【LeetCode】869. Reordered Power of 2 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计每位数字出现的次数 日期 题目地址:http ...

  2. 【LeetCode】889. Construct Binary Tree from Preorder and Postorder Traversal 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. 在线编辑Word——插入图片、图形

    在Word中支持插入图片.图形等元素,同时支持对插入的图片和图形进行格式化操作,如裁剪.调整尺寸大小.调成颜色.阴影.倾斜角度.透明度等等.本文,将通过使用Spire.Cloud Word在线编辑器来 ...

  4. P4081 [USACO17DEC]Standing Out from the Herd P

    知识点: 广义 SAM 原题面 Luogu 「扯」 随便「口胡」一下居然「过」了. 比较考验「代码能力」,第一次感觉「大模拟」没有白写((( 还有这个「符号」实在是太「上头」了. 前置知识 在线构造广 ...

  5. Chapter 7 Confounding

    目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...

  6. Practical Black-Box Attacks against Machine Learning

    目录 概 主要内容 Jacobian-based Dataset Augmentation Note Papernot N, Mcdaniel P, Goodfellow I, et al. Prac ...

  7. vue项目发布后,线上运行时刷新404

    修改nginx配置文件 location / { root ... index ... try_files $uri $uri/ /index.html; ---解决页面刷新404问题 } (参考官网 ...

  8. 【MySQL作业】多字段分组和 having 子句——美和易思分组查询应用习题

    点击打开所使用到的数据库>>> 1.按照商品类型和销售地区分组统计商品数量和平均单价,并按平均单价升序显示. -- 按照商品类型和销售地区分组统计商品数量和平均单价,并按平均单价升序 ...

  9. Linux下如何部署FTP服务器

    FTP 是 File Transfer Protocol 的缩写,即文件传输协议,它通过网络在服务器和客户端之间传输文件,现在已经成为一种广泛使用的标准工具 vsftpd 是 very secure ...

  10. CSS基础 装饰 元素本身隐藏和显示效果及案例

    1.visibility:hidden; 2.display: none: 区别: 1.visibility:hidden 隐藏元素本身,且在网页中 占位置 2.display:none; 隐藏元素本 ...