A. android开发有没有人做过日历控件,可以签到的
可以按照这个思路:
首先是MainActivity,源码如下
java"><prename="code"class="java">{
privateSignCalendarcalendar;
privateStringdate;
privateintyears;
privateStringmonths;
privateButtonbtn_sign;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-dd");
DatecurDate=newDate(System.currentTimeMillis());//获取当前时间
date=formatter.format(curDate);
calendar=(SignCalendar)findViewById(R.id.sc_main);
btn_sign=(Button)findViewById(R.id.btn_sign);
btn_sign.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
List<String>list=newArrayList<String>();
list.add("2016-06-30");
list.add(date);
//calendar.setCalendarDaysBgColor(list,
//R.drawable.bg_sign_today);
calendar.addMarks(list,0);
}
});
}
}
以下是布局文件:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.h.cheng.signcalendar.MainActivity">
<com.h.cheng.signcalendar.SignCalendar
android:id="@+id/sc_main"
android:layout_width="match_parent"
android:layout_height="320dp"
android:clickable="true">
</com.h.cheng.signcalendar.SignCalendar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_sign"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:background="#f00"
android:text="签到"
android:textColor="#fff"/>
</LinearLayout>
</LinearLayout>
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 日历教程
一、创建
Android
Project
在新建对话框中输入
App
属性,SDK版本全部选最新的,不作版本兼容。主题选择
Holo
Dark。
下一步,使用默认设置
下一步,使用默认设置
下一步,使用默认配置
下一步,使用默认设置
创建完成后的初始画面
在上面的步骤中,我们选择了创建
MainActivity,ADT
帮我们在
src
目录下生成了
MainActivity.java
文件,在
res/layout/
目录下生成了
activity_main.xml
文件,并在编辑窗口打开,如上图,是
UI
界面定义文件,这是一个标准的
xml
文件,显示的图像就是由编辑器解析
xml
文件描绘出来的。点击下方的
"Graphical
Layout"
和
“activity_main.xml"
可以在图形编辑
和
xml
文本编辑器之间切换。
为了项目结构清晰,我们新建一个包,专门用来放
activity:
包名定为
ui.activity
这里,将
Package
Explorer
的显示方式改为
Hierarchical
拖动
MainActivity.java
到
ui.activity
包下,弹出更新对话框,选择OK。
由于改变了
activity
的位置,我们需要更新
AndroidManifest.xml,更正
Application
的配置。
如下图,双击打开
AndroidManifest.xml,选择
Application
标签页,选中
Application
Nodes
中的
MainActivity,右边的
Name
属性是错误的,点击
Browse
重新选择,设为:com.lingsmm.purelunarcalendar.ui.acivity
继续向下拉,将
Screen
orientation
设置为
”sensorLandscape“,表示屏幕方向是横屏,并感应重力方向作调整。
界面编辑窗口上方是工具栏:
1:多屏预览,如果你的程序要兼容多种尺寸的设备,可以选择此项。
2:主屏尺寸设定(我们的应用,不作兼容,只针对
google
Nexus
7,将此选择为
Nexus
7,以10”画面进行编辑布局)
3:屏幕方向,我们选择横屏
4:主题
5:关联的
Java
类,Context
实例由它创建。
6:多语言支持。
7:系统版本选择,如果兼容多版本,可以选择不同版本进行预览。
D. 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。
E. android 自定义日期控件怎么实现的
自定义DigitalClock的布局
布局空间设置
DigitalClock
package com.javen.digitalclock;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;
public class DigitalClock extends LinearLayout {
static SimpleDateFormat sdf_time = new SimpleDateFormat("hh:mm:ss");
static SimpleDateFormat sdf_date = new SimpleDateFormat("yyyy年MM月dd日");
static Calendar cal = Calendar.getInstance();
private TextView textViewTime, textViewDate, textViewWeek;
// public DigitalClock(Context context, AttributeSet attrs, int defStyle) {
// super(context, attrs, defStyle);
// }
public DigitalClock(Context context, AttributeSet attrs) {
super(context, attrs);
// 使用layoutinflater把布局加载到本ViewGroup
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.digitalcolck_layout, this);
textViewTime = (TextView) findViewById(R.id.textViewTime);
textViewDate = (TextView) findViewById(R.id.textViewDate);
textViewWeek = (TextView) findViewById(R.id.textViewWeek);
startThread();
}
public static String getCurrentTime(Date date) {
sdf_time.format(date);
return sdf_time.format(date);
}
public static String getCurrentDate(Date date) {
sdf_date.format(date);
return sdf_date.format(date);
}
public static String getCurrentWeekDay(Date dt) {
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
private void startThread() {
new Thread(new Runnable() {
public void run() {
while (true) {
handler.sendEmptyMessage(12);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 12) {
Date date = new Date();
textViewTime.setText(getCurrentTime(date));
textViewDate.setText(getCurrentDate(date));
textViewWeek.setText(getCurrentWeekDay(date));
}
}
};
}
mainActivity
package com.javen.digitalclock;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
布局文件main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.javen.digitalclock.DigitalClock
android:id="@+id/digitalClock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DigitalClock"
>
</com.javen.digitalclock.DigitalClock>
</LinearLayout>
F. 简单实用的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
G. 使用android自带的日历控件怎么标记特定的
初始情况
3.这里还要感谢前辈的代码作为参考,毕竟以前也没有写过关于日历方面的东西,别人确实写得不错,我在原基础上加入了数据库操作等补充,以完成自己实际需求,作为尊重首先给出原作者的连接
就是这里–>Android自定义控件实现可多选课程日历CalendarView
4.然后贴出来关于数据库操作的代码,给大家作为参考
DatabaseHelper .java 这是关于简单数据库操作的部分
package com.xugongming38.editcalendar.utils;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/*** Created by dell on 2017/5/18.*/public class DatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_DIARY = "create table Hair("+ "id integer primary key autoincrement, "+ "content text)";private Context mContext;public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){super(context, name, factory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_DIARY);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("drop table if exists Hair");onCreate(db);}}DataHelper .java 简化数据操作接口,避免直接操作数据库,做了再一层的封装,建议读者也这样做,可以让代码更清晰,更容易复用
H. android studio 日历控件怎么简单些
每个安卓系统自带的日历都不尽相同,而且有些日历为了节省内存过于精简,是没有这种功能的。如果可以做到的一般会有个新建的按钮,新建日程提醒。在更多按钮可以设置提醒的方式。首先你要自定义一个控件,一般采用继承原有控件的方式,然后在布局文件使用你要用的自定义控件,需要包含包名,再就是在activity中写控件的控制代码。可以看看安卓巴士教程:http://www.apkbus.com/forum-96-1.html
I. Android下几个相关的时间日期控件的用法
获取年月日,之前的日期不能选择
日历c = Calendar.getInstance(); //获取系统的工具类【可以获取时间】DatePickerDialog datePickerDialog = new DatePickerDialog(context,new DatePickerDialog.OnDateSetListener(){@覆盖public void onDateSet(DatePicker view,int year,int month,int dayOfMonth){月+ = 1;yuyueTime.setText(year +“ - ”+ month +“ - ”+ dayOfMonth);}},c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DATE)); //设置默认时间。datePickerDialog.getDatePicker()setMinDate(c.getTime()的getTime()); //设置最小值datePickerDialog.show();
相关类的认识
选取器(的DatePicker,TimerPicker,NumberPicker)
其中的DatePicker和TimerPicker都有窗口的形式显示日期和时间,再返回数据。
下面分别介绍这几种时间类的使用方法。
一.DatePicker日期选择类的使用
DatePicker的常用的XML属性
XML属性
描述
机器人:calendarViewShown 设置该日期选择是否显示CalendarView组件。
机器人:endYear 设置日期选择器允许选择的最后一年。
安卓的maxDate 设置该日期选择器的最大日期。以MM / DD / YYYY格式指定最大日期。
安卓的minDate 设置该日期选择器的最小日期。以MM / DD / YYYY格式指定最小日期。
机器人:spinnersShown 设置该日期选择器是否显示微调日期选择组件。
机器人:startYear 设置日期选择器允许选择的第一年。
当用户更改了的DatePicker里的年,月,日时,将触发OnDateChangedListener监听器的onDateChange()事件。
二.TimePicker日期选择类的使用
当用户更改了TimePicker里的时,分时,将触发OnTimeChangedListener监听器的onTimeChanged事件。
下面是日期选择类和时间选择类的一个使用示例:
(一)布局文件设计
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="显示日期的控件" /><DatePicker android:id="@+id/main_dp"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="显示时间的控件" /><TimePicker android:id="@+id/main_tp_showTime"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextView android:id="@+id/main_tv_showdate"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示日期" /><TextView android:id="@+id/main_tv_showtime"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示时间" /></LinearLayout>
1
(二)主代码设计
1
运行后显示的结果:
可以从运行结果直接看到,控件的显示,可以上下拖动选择自己想要的日期和时间,但是,我们看到这样做是比较占屏幕空间的。所以后面介绍的用窗口选择日期和时间是比较常用的。
三。DatePickerDialog
DatePickerDialog和TimePickerDialog,与的DatePicker和TimePicker,最大的区别是的DatePicker和TimePicker是直接显示在屏幕画面上的,而DatePickerDialog和TimePickerDialog对象则是以弹出对话框的方式来显示。
创建DatePickerDialog的语法如下:
1
参数说明:
上下文:当前上下文;
回调:OnDateSetListener日期改变监听器;
年:初始化的年;
monthOfYear:初始化的月(从0开始计数,所以实际应用时需要加1);
请将dayOfMonth:初始化的日;
当用户更改了DatePickerDialog里的年,月,日时,将触发OnDateSetListener监听器的onDateSet()事件。
四。TimePickerDialog
创建TimePickerDialog的语法如下:
1
参数说明:
上下文:当前上下文;
听众:时间改变监听器;
hourOfDay:初始化的小时;
分钟:
初始化的分钟; is24HourView:是否以24小时显示时间;
当用户更改了TimePickerDialog里的时,分时,将触发OnTimeSetListener监听器的onTimeSet()事件。
下面是日期和时间以窗口的形式显示的示例:
(一)布局文件设计
1
(二)代码设计
1
运行后显示的界面:点击日期按钮后点击时间按钮后之后显示的效果
这个以对话框的形式来选择时间还是比较常见的。而且用户体验也是比较好的。
五。NumberPicker
NumberPicker是数值选择器,用于让用户输入数值,用户既可以通过键盘输入数值,也可以通过拖动来选择数值。
NumberPicker的常用方法如下:
方法
描述
setMinValue(int minVal) 设置该组件支持的最小值。
setMaxValue(int maxVal) 设置该组件支持的最大值。
setValue(int value) 设置该组件的当前值。
getMaxValue() 获得该组件设置的最大值。
getMinValue() 获得该组件设置的最小值。
的getValue() 获得当前组件显示的值。
setValue(int value) 设置当前组件显示的值。
使用NumberPicker让用户选择年月日的示例:
(一)布局文件设计
1
(二)的Java代码的设计
1
程序运行后的效果:
选择日期之后的效果
可以看到同样可以显示出日期。
这里是用来三个NumberPicker控件才能有这个效果,如果要具体时间要多加两个NumberPicker控件,就可以了。
但是这样做相对来的要出来的数据还是比较多一点的。
以上就是时间控件的使用的方法和简单使用,总的来的还是以窗口的形式来显示还是比较符合设计思想的,也是我们要重点掌握的。
J. Android开发中几种有用的的日历控件实现
道客巴巴精品文档 android日历控件 android 控件 android 自定义控件 android 日期控件 android 控件属性 android 控件不可见 android 时间控件 android 浏览器控件 android组合控件 android常用控件