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】976. Largest Perimeter Triangle 解题报告(Python)

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

  2. JS调用摄像头拍照,编辑jscam.swf自定义清晰度,兼容IE

    超级简单自定义宽高的jscam.swf文件: 下载swfmill,地址:http://download.csdn.net/download/wu3431214/9967414 下载mtasc,地址:h ...

  3. Direct and Indirect Effects

    目录 概 主要内容 CDE NDE NIE TDE, TIE, PDE, PIE Judea Pearl. Direct and indirect effects. In Proceedings of ...

  4. 【C#】C#中使用GDAL3(三):Windows下编译插件驱动

    转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html 本文为<C#中使用GDAL3>的第三篇,总目录地址:https://www. ...

  5. Mysql 设计超市经营管理系统,包括员工库存表(stock) 和 仓库表(warehouse)

    互联网技术学院周测机试题(三) 一.需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功能 ...

  6. Hadoop编译打包记录

    Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...

  7. Java--Map的使用认知

    Java里面的Map是一个抽象接口,有一些类实现的该接口比如HashMap.TreeMap等 HashMap 是一个散列表,存储的内容是靠键值对来映射的(key-value). 基本认识 HashMa ...

  8. Pytest_跳过用例的执行(7)

    pytest跳过用例执行的用法与unittest跳过用例大致相同. pytest跳过用例的方法如下: pytest.mark.skip(reason):无条件用例.reason是跳过原因,下同. py ...

  9. django在创建用户时设置一个默认的密码

    1. 在settings.py文件中定义初始密码 2. 在signal.py文件中密码加密时导入settings中的配置 去查看数据库密码已加密 来自为知笔记(Wiz)

  10. springboot 项目在idea 中不能起动,但是在eclipse中能起动

    新建的springboot 项目,在idea中用main方法起动时出现如下 : 但是把项目导入到eclispe中却能正常运行,百思不其解,网上一通百度,有的说没有依赖springboot的web 启动 ...