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

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

  1. package com.example.Utils.fragment;
  2.  
  3. import android.app.Dialog;
  4. import android.content.Context;
  5. import android.graphics.Color;
  6. import android.os.Bundle;
  7. import android.view.*;
  8. import android.widget.*;
  9. import androidx.annotation.NonNull;
  10. import com.example.Utils.R;
  11. import com.example.Utils.adapter.CalendarAdapter;
  12. import com.example.Utils.database.DBManager;
  13.  
  14. import java.util.ArrayList;
  15. import java.util.Calendar;
  16. import java.util.List;
  17.  
  18. public class CalendarDialog extends Dialog implements View.OnClickListener {
  19. ImageView errorIv;
  20. GridView gv;
  21. LinearLayout hsvLayout;
  22.  
  23. List<TextView>hsvViewList;
  24. List<Integer>yearList;
  25.  
  26. int selectPos = -1; //表示正在被点击的年份的位置
  27. private CalendarAdapter adapter;
  28. int selectMonth = -1;
  29.  
  30. public interface OnRefreshListener{
  31. public void onRefresh(int selPos,int year,int month);
  32. }
  33. OnRefreshListener onRefreshListener;
  34.  
  35. public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
  36. this.onRefreshListener = onRefreshListener;
  37. }
  38.  
  39. public CalendarDialog(@NonNull Context context, int selectPos, int selectMonth) {
  40. super(context);
  41. this.selectPos = selectPos;
  42. this.selectMonth = selectMonth;
  43. }
  44.  
  45. @Override
  46. protected void onCreate(Bundle savedInstanceState) {
  47. super.onCreate(savedInstanceState);
  48. setContentView(R.layout.dialog_calendar);
  49. gv = findViewById(R.id.dialog_calendar_gv);
  50. errorIv = findViewById(R.id.dialog_calendar_iv);
  51. hsvLayout = findViewById(R.id.dialog_calendar_layout);
  52. errorIv.setOnClickListener(this);
  53. // 向横向的ScrollView当中添加View的方法
  54. addViewToLayout();
  55. initGridView();
  56. //设置GridView当中每一个item的点击事件
  57. setGVListener();
  58. }
  59.  
  60. private void setGVListener() {
  61. gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  62. @Override
  63. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  64. adapter.selPos = position;
  65. adapter.notifyDataSetInvalidated();
  66. int month = position + 1;
  67. int year = adapter.year;
  68. // 获取到被选中的年份和月份
  69. onRefreshListener.onRefresh(selectPos,year,month);
  70. cancel();
  71. }
  72. });
  73. }
  74.  
  75. private void initGridView() {
  76. int selYear = yearList.get(selectPos);
  77. adapter = new CalendarAdapter(getContext(), selYear);
  78. if (selectMonth == -1) {
  79. int month = Calendar.getInstance().get(Calendar.MONTH);
  80. adapter.selPos = month;
  81. }else {
  82. adapter.selPos = selectMonth-1;
  83. }
  84. gv.setAdapter(adapter);
  85. }
  86.  
  87. private void addViewToLayout() {
  88. hsvViewList = new ArrayList<>(); //将添加进入线性布局当中的TextView进行统一管理的集合
  89. yearList = DBManager.getYearListFromAccounttb(); //获取数据库当中存储了多少个年份
  90. //如果数据库当中没有记录,就添加今年的记录
  91. if (yearList.size() == 0) {
  92. int year = Calendar.getInstance().get(Calendar.YEAR);
  93. yearList.add(year);
  94. }
  95.  
  96. //遍历年份,有几年,就向ScrollView当中添加几个view
  97. for (int i = 0; i < yearList.size(); i++) {
  98. int year = yearList.get(i);
  99. View view = getLayoutInflater().inflate(R.layout.item_dialogcal_hsv, null);
  100. hsvLayout.addView(view); //将view添加到布局当中
  101. TextView hsvTv = view.findViewById(R.id.item_dialogcal_hsv_tv);
  102. hsvTv.setText(year+"");
  103. hsvViewList.add(hsvTv);
  104. }
  105. if (selectPos == -1) {
  106. selectPos = hsvViewList.size()-1; //设置当前被选中的是最近的年份
  107. }
  108. changeTvbg(selectPos); //将最后一个设置为选中状态
  109. setHSVClickListener(); //设置每一个View的监听事件
  110. }
  111. /** 给横向的ScrollView当中每一个TextView设置点击事件*/
  112. private void setHSVClickListener() {
  113. for (int i = 0; i < hsvViewList.size(); i++) {
  114. TextView view = hsvViewList.get(i);
  115. final int pos = i;
  116. view.setOnClickListener(new View.OnClickListener() {
  117. @Override
  118. public void onClick(View v) {
  119. changeTvbg(pos);
  120. selectPos = pos;
  121. // 获取被选中的年份,然后下面的GridView显示数据源会发生变化
  122. int year = yearList.get(selectPos);
  123. adapter.setYear(year);
  124. }
  125. });
  126. }
  127. }
  128.  
  129. /** 传入被选中的位置,改变此位置上的背景和文字颜色*/
  130. private void changeTvbg(int selectPos) {
  131. for (int i = 0; i < hsvViewList.size(); i++) {
  132. TextView tv = hsvViewList.get(i);
  133. tv.setBackgroundResource(R.drawable.dialog_btn_bg);
  134. tv.setTextColor(Color.BLACK);
  135. }
  136.  
  137. TextView selView = hsvViewList.get(selectPos);
  138. selView.setBackgroundResource(R.drawable.main_recordbtn_bg);
  139. selView.setTextColor(Color.WHITE);
  140. }
  141.  
  142. @Override
  143. public void onClick(View v) {
  144. switch (v.getId()) {
  145. case R.id.dialog_calendar_iv:
  146. cancel();
  147. break;
  148. }
  149. }
  150.  
  151. /* 设置Dialog的尺寸和屏幕尺寸一致*/
  152. public void setDialogSize(){
  153. // 获取当前窗口对象
  154. Window window = getWindow();
  155. // 获取窗口对象的参数
  156. WindowManager.LayoutParams wlp = window.getAttributes();
  157. // 获取屏幕宽度
  158. Display d = window.getWindowManager().getDefaultDisplay();
  159. wlp.width = (int)(d.getWidth()); //对话框窗口为屏幕窗口
  160. wlp.gravity = Gravity.TOP;
  161. window.setBackgroundDrawableResource(android.R.color.transparent);
  162. window.setAttributes(wlp);
  163. }
  164. }

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】933. Number of Recent Calls 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 队列 相似题目 参考资料 日期 题目地址: ...

  2. 【LeetCode】Pascal's Triangle II 解题报告

    [LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...

  3. 【LeetCode】792. Number of Matching Subsequences 解题报告(Python)

    [LeetCode]792. Number of Matching Subsequences 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...

  4. Spring Boot实战一:搭建Spring Boot开发环境

    一开始接触Spring Boot就感到它非常强大,也非常简单实用,遂想将其记录下来. 搭建Spring Boot工程非常简单,到:http://start.spring.io/ 下载Spring Bo ...

  5. vue 滚动公告

    <!-- 滚动公告 --> <div class="textArr"> <p class="slice-enter-active" ...

  6. ImageNet2017文件下载

    ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...

  7. 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...

  8. localstorage的浏览器支持情况

    localStorage的兼容性不错,就国内的情况,已经基本没有问题了.localStorage的原理很简单,浏览器为每个域名划出一块本地存储空间,用户网页可以通过localStorage命名空间进行 ...

  9. Mybatis获取自增主键的值

    pojo: public class User { private Integer id; private String name; private String pwd; setter和getter ...

  10. 原型模式(python)

    原型模式也叫克隆模式,通过拷贝自身的属性来创建一个新的对象,基本方法就是调用copy模块下的 (浅拷贝)copy() 和(深拷贝)deepcopy() #!/usr/bin/env python3 # ...