Android开发-主要的dialog
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的更多相关文章
- Android 开发之自定义Dialog及UI的实现
我们在开发中,经常会自定义Dialog,因为原生的AlertDialog无法满足我们的需求,这个时候就需要自定义Dialog,那么如何自定义呢,其实不难,就是有点繁琐而已.也就是自定义一个UI的xml ...
- Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)
引言 开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息.如:用户提示.进度展示.时间设置.日期设置等. 下面我和大家一些学习下Android中常用的几种Dialog吧~ * 首 ...
- Android开发技巧——使用Dialog实现仿QQ的ActionSheet菜单
最近看到有人用Dialog来实现QQ的仿ActionSheet的自定义菜单,对于自己没实现过的一些控件,看着也想实现一下.于是动手了一下,发现也不难,和大家分享一下. 本文原创,转载请注明出处:htt ...
- Android开发之自定义Dialog简单实现
本文着重研究了自定义对话框,通过一下步骤即可清晰的理解原理,通过更改界面设置和style类型,可以应用在各种各样适合自己的App中. 首先来看一下效果图: 首先是activity的界面 点击了上述图片 ...
- Android开发之设定Dialog的位置
今天自定义了一个对话框,但是弹出时默认是显示在屏幕中间.主要代码:menuDialog = new AlertDialog.Builder(this).create(); ...
- Android开发技巧——实现可复用的ActionSheet菜单
在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...
- Android开发实战之底部Dialog弹出效果
在Android开发中,有很多情况下我们需要使用到对话框,遗憾的是,安卓自带的对话框样式不能满足我们实际的需要,所以往往需要我们自定义对话框,具体做法:写一个对话框继承自Dialog实现他的一个构造方 ...
- Android开发:使用DialogFragment实现dialog自定义布局
使用DialogFragment实现dialog的自定义布局最大的好处是可以更好控制dialog的生命周期. TestFragment的代码: public class TestFragment ex ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
随机推荐
- 【LeetCode】933. Number of Recent Calls 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 队列 相似题目 参考资料 日期 题目地址: ...
- 【LeetCode】Pascal's Triangle II 解题报告
[LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...
- 【LeetCode】792. Number of Matching Subsequences 解题报告(Python)
[LeetCode]792. Number of Matching Subsequences 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- Spring Boot实战一:搭建Spring Boot开发环境
一开始接触Spring Boot就感到它非常强大,也非常简单实用,遂想将其记录下来. 搭建Spring Boot工程非常简单,到:http://start.spring.io/ 下载Spring Bo ...
- vue 滚动公告
<!-- 滚动公告 --> <div class="textArr"> <p class="slice-enter-active" ...
- ImageNet2017文件下载
ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...
- 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行
需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...
- localstorage的浏览器支持情况
localStorage的兼容性不错,就国内的情况,已经基本没有问题了.localStorage的原理很简单,浏览器为每个域名划出一块本地存储空间,用户网页可以通过localStorage命名空间进行 ...
- Mybatis获取自增主键的值
pojo: public class User { private Integer id; private String name; private String pwd; setter和getter ...
- 原型模式(python)
原型模式也叫克隆模式,通过拷贝自身的属性来创建一个新的对象,基本方法就是调用copy模块下的 (浅拷贝)copy() 和(深拷贝)deepcopy() #!/usr/bin/env python3 # ...