A. 安卓手机日历的使用
为了方便大家更好的使用日历,我做一个简单的教程供参考。
1.点击右上角一个笔的符号
2.添加自己的事件(下面的时间和闹钟大家应该都会)
敲黑板: 有的事件是每周都要的,如果一周一周弄很麻烦。
点击下面“有数字2的刷新符号”就可以设置重复了。
1.点击左上角三条线的符号
2.出来这样的画面,然后再点击右上角的齿轮符号。
3.找到管理日历这一项
4.点击solcalendar右边的加号,即可添加日历。
5.这样在设置日程的时候,就可以勾选决定保存在那个日历。
6.如何查看呢
同样和上面一样,先点击右上角的三条线符号出来这个页面。
点击最右边的日历,即可显示自己想要查看的日历。
(以下借鉴班级同学内容)
B. 安卓日历整体布局是怎么实现的
自定义日历控件,支持旧历、节气、日期标注、点击操作 (参考网络上的日历控件改写)
注:将下面的四张资源图片拷贝到所建包的下一个image目录中,如Calendar.java 所在包为
cc.util.android.view,则需要再创建一个包cc.util.android.view.image 然后将图片拷贝进去
/****************从此出开始将代码拷贝到一个文件中*******************/
package cc.util.android.view;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ViewFlipper;
import android.widget.AbsListView.LayoutParams;
/**
* 日历控件,支持旧历、节气、日期标注、点击操作 (参考网络上的日历控件改写)
*
* @author wangcccong
* @version 1.406 create at: Mon, 03 Sep. 2014
* <br>update at: Mon, 23 Sep. 2014
* 新增日期标注和点击操作
*/
public class CalendarView extends LinearLayout implements OnTouchListener,
AnimationListener, OnGestureListener {
/**
* 点击日历
*/
public interface OnCalendarViewListener {
void onCalendarItemClick(CalendarView view, Date date);
}
/** 顶部控件所占高度 */
private final static int TOP_HEIGHT = 40;
/** 日历item中默认id从0xff0000开始 */
private final static int DEFAULT_ID = 0xff0000;
// 判断手势用
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
// 屏幕宽度和高度
private int screenWidth;
// 动画
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
private GestureDetector mGesture = null;
/** 上一月 */
private GridView gView1;
/** 当月 */
private GridView gView2;
/** 下一月 */
private GridView gView3;
boolean bIsSelection = false;// 是否是选择事件发生
private Calendar calStartDate = Calendar.getInstance();// 当前显示的日历
private Calendar calSelected = Calendar.getInstance(); // 选择的日历
private CalendarGridViewAdapter gAdapter;
private CalendarGridViewAdapter gAdapter1;
private CalendarGridViewAdapter gAdapter3;
private LinearLayout mMainLayout;
private TextView mTitle; // 显示年月
private int iMonthViewCurrentMonth = 0; // 当前视图月
private int iMonthViewCurrentYear = 0; // 当前视图年
private static final int caltitleLayoutID = 66; // title布局ID
private static final int calLayoutID = 55; // 日历布局ID
private Context mContext;
/** 标注日期 */
private final List<Date> markDates;
private OnCalendarViewListener mListener;
public CalendarView(Context context) {
this(context, null);
}
public CalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mContext = context;
markDates = new ArrayList<Date>();
init();
}
// 初始化相关工作
protected void init() {
// 得到屏幕的宽度
screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
// 滑动的动画
slideLeftIn = new TranslateAnimation(screenWidth, 0, 0, 0);
slideLeftIn.setDuration(400);
slideLeftIn.setAnimationListener(this);
slideLeftOut = new TranslateAnimation(0, -screenWidth, 0, 0);
slideLeftOut.setDuration(400);
slideLeftOut.setAnimationListener(this);
slideRightIn = new TranslateAnimation
C. android日历控件
1.DatePicker
在Android中,DatePicker用来实现日期输入设置,日期的设置范围为1900年1月1日至2100年12月31日。
1.1常用xml属性
DatePicker的常用xml属性如图1所示:
图1 DatePicker常用xml属性
其中,android:calendarViewShown[boolean]用于设置是否显示calendar view;android:endYear[int]用于设置截至日期;android:maxDate[int]用于设置最大的日期;android:minDate[int]用于设置最小的日期;android:spinnersShown[boolean]用于设置是否显示spinners;android:startYear[int]用于设置起始日期。
1.2常用方法
DatePicker的常用方法有以下一些:
(1)public CalendarView getCalendarView(); //获取CalendarView
(2)public boolean getCalendarViewShown(); //获取CalendarView是否显示
(3)public int getDayOfMonth(); //获取当前日期的日
(4)public long getMaxDate(); //获取最大日期
(5)public long getMinDate(); //获取最小日期
(6)public int getMonth(); //获取当前日期的月
(7)public boolean getSpinnersShown(); //获取Spinners是否显示
(8)public int getYear(); //获取当前日期的年
(9)public void init(int year,int monthOfYear,int dayOfMonth,
DatePicker.OnDateChangedListener onDateChangedListener); //初始化日期
(10)public void setCalendarViewShown(boolean shown);//设置是否显示CalendarView
(11)public void setMaxDate(long maxDate); //设置最大日期
(12)public void setMinDate(long minDate); //设置最小日期
(13)public void setSpinnersShown(boolean shown); //设置是否显示Spinners
(14)public void updateDate(int year,int month,int dayOfMonth); //更新当前日期2.TimePicker
在Android中,TimePicker用来实现时间输入设置,可以选择12或24小时模式。TimePicker的常用方法有以下一些:
(1)public Integer getCurrentHour(); //获取当前时间的小时
(2)public Integer getCurrentMinute(); //获取当前时间的分钟
(3)public boolean is24HourView(); //获取是否为24小时模式
(4)public void setCurrentHour(Integer currentHour); //设置当前时间的小时
(5)public void setCurrentMinute(Integer currentMinute); //设置当前时间的分钟
(6)public void setIs24HourView(Boolean is24HourView); //设置24小时模式3.DatePickerDialog
在Android中,DatePickerDialog用来显示日期对话框。DatePickerDialog的常用方法有以下一些:
(1)public DatePicker getDatePicker(); //获取DatePicker中的日期值
(2)public void onClick(DialogInterface dialog,int which); //响应对话框中的点击事件
(3)public void onDateChanged(DatePicker view,int year,int month,int day); //响应日期改变事件
(4)public void updateDate(int year,int monthOfYear,int dayOfMonth); //更新当前日期4.TimePickerDialog
在Android中,TimePickerDialog用来显示时间对话框。TimePickerDialog的常用方法有以下一些:
(1)public void onClick(DialogInterface dialog,int which); //响应对话框中的点击事件
(2)public void onTimeChanged(TimePicker view,int hourOfDay,int minute); //响应时间改变事件
(3)public void updateTime(int hourOfDay,int minuteOfHour); //更新当前时间5.AnalogClock
在Android中,AnalogClock用于显示指针式时钟,该时钟仅有时钟和分钟两个指针。6.DigitalClock
在Android中,DigitalClock用来显示数字式时钟,显示格式为HH:MM:SS AM/PM。
D. 如何用android设计一个日历
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
E. Android向系统日历添加日程事件闹钟不提示解决方法
1.项目中需要向系统日历添加日程,怎么添加就不多说了,网络一大堆,这文章主要解决准时或者提前多久闹钟提醒(CalendarContract.Reminders.MINUTES不设置时间也表示准时提醒)
2.添加多个闹钟提醒
道理是一样的,创建多个ContentValues,也可以直接循环创建,并设置CalendarContract.Reminders.MINUTES,这里就演示准时和提前十分钟各提醒一次了,大家可以根据需求创建 。
3.根据自己定义的id删除日程
(1).添加日历事件时,put(“_id”,"自己定义的id")
(2)删除时通过之前设置的id找到并删除
提示:6.0之后要动态申请日历读写权限
F. Android日历——基于RecyclerView的日历
最近项目紧,需求多,本着能GitHub的就不自己动手。然鹅,并没有找到合适的。还是自己动手撸吧,再不完成就要被领导撸了。
1、部分功能需要日历可以单选;
2、入住日期需要范围选择;
3、对应显示农历。
对于需求1和2,其本质需求是一样的,有了一个日历基础上就是控制选择的逻辑问题。那么日历从哪儿来呢?
答案显而易见,标题已经划重点了——RecyclerView。
这种上下滚动的日历(或者说这种布局),我们已经到了见了就有条件反应的地步了。从一开始的ListView、GridView到现在的RecyclerView,基本每个app都会用到。
那么这个日历就决定是它了,出来吧:RecyclerView嵌套RecyclerView。
其中复杂的就是嵌套的RecyclerView,其中需要显示的不同状态的日期较多。如不可选择的1号之前的日期、今天的日期、周末的日期等。
项目地址: GitHub - Mitaxing/RVCalendar: 基于RecyclerView自定义日历,可单选,可范围选
G. 做一个android日历,从哪儿入手
如果你搭建好环境的话建议你先学一下view布局
首先你要在第一个activity创建一个垂直布局的LinearLayout,
然后再新建个水平布局的LinearLayout用来承载上面按钮的年月日
另外再建个垂直的LinearLayout
在下面这个LinearLayout新建1个水平的LinearLayout来循环生成7个标头“星期一,星期二”这样的
然后在循环建4个LinearLayout循环生成日期实体框
标题框和日期框分别新建一个类,继承view函数,在循环里面生成,构造函数填入宽高
这两个类里面分别重构ondraw()函数。
这样就ok了
H. 简单实用的Android 自定义 日历 Calendar
==========================
Include MonthPager in your layout XML.
目前来看 相比于Dialog选择日历 我的控件更适合于Activity/Fragment在Activity的 onCreate 或者Fragment的 onCreateView 你需要实现这两个方法来启动日历并装填进数据
使用此方法回调日历点击事件
使用此方法初始化日历标记数据
使用此方法给MonthPager添加上相关监听
Gradle:
Step 1. Add it in your root build.gradle at the end of repositories:
Step 2. Add the dependency
I. Android Compose 简易日历
初学Compose肯定要做些东西来熟悉,接下来我来分享我做的一个简易日历。
首先推荐一个网站,Accompanist是一组库,旨在用开发人员通常需要但尚不可用的功能来补充[Jetpack Compose。]。 google.github.io/accompanist…
协奏曲pager implementation("com.google.accompanist:accompanist-pager:0.21.3-beta")
然后是一个库,帮助我们在compose里创建和管理viewmodel
implementation('androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0')
首先日历有年月日,但是我做的这个日历没有年份,你当然也可以自己添加。
【Android开发】Android开发教程——jetpack Compose原理解析以及未来趋势_哔哩哔哩_bilibili