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