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);
}
}

最新文章

  1. Performance Monitor4:监控SQL Server的IO性能
  2. paip.性能跟踪profile原理与架构与本质-- python扫带java php
  3. Daily Scrum4
  4. RPM是RedHat Package Manager(RedHat软件包管理工具)
  5. 关于使用用友华表Cell控件按需打印行的方法
  6. js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法
  7. [YUM]Public key for *.rpm is not installed
  8. 利用R语言打造量化分析平台
  9. c语言,结构体
  10. 原生JavaScript实现一个简单的todo-list
  11. Linux —— 命令
  12. Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载
  13. [转] pytorch指定GPU
  14. IDEA手工添加webapp目录
  15. Windows 使用 Gogs 搭建 Git 服务器(转)
  16. 可遇不可求的Question之flash的socket连接安全策略文件篇
  17. Java实现DOS中的Copy命令
  18. 【ES】学习2-搜索
  19. ATM取款机
  20. ubuntu将python3设为默认后再安装支持python3.x的包

热门文章

  1. 【LeetCode】648. Replace Words 解题报告(Python & C++)
  2. 【操作系统】 DOS命令windows批处理batch编程——第一章
  3. # 中文NER的那些事儿6. NER新范式!你问我答之MRC
  4. CS5265完美替代CH7211|Type-C转HDMI2.0单转方案|CH7211替代方案
  5. MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】
  6. Java面向对象笔记 • 【第9章 JDBC编程】
  7. contos mongodb 安装
  8. SpringBoot读取外部配置文件的方法
  9. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
  10. 基于GO语言实现的固定长度邀请码