【问题标题】:calendar day/month/week view in androidandroid中的日历日/月/周视图
【发布时间】:2014-10-25 06:40:09
【问题描述】:

我需要一个 android 日历视图,如附加照片。我已经尝试过这个库 https://github.com/alamkanak/Android-Week-View 用于日历视图。 这是日历添加中的固定静态事件。 我无法在此库日历视图中动态添加事件。 任何人都可以在android中建议任何自定义库。

日历视图库代码的示例 Android-Week-View :

我在这个库中尝试过的内容:

这是代码,在日历视图中静态添加事件。运行此示例时,我可以在日历视图中查看特定日期的事件。

 @Override
 public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {

  // Populate the week view with some events.
    List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();

    Calendar startTime = Calendar.getInstance();
    startTime.set(Calendar.HOUR_OF_DAY, 3);
    startTime.set(Calendar.MINUTE, 0);
    startTime.set(Calendar.MONTH, newMonth-1);
    startTime.set(Calendar.YEAR, newYear);
    Calendar endTime = (Calendar) startTime.clone();
    endTime.add(Calendar.HOUR, 1);
    endTime.set(Calendar.MONTH, newMonth-1);
    WeekViewEvent event = new    WeekViewEvent(1, getEventTitle(startTime),
    startTime, endTime);
    event.setColor(getResources().getColor(R.color.event_color_01));
    events.add(event);
      return events;
    }
    when i click this event on calendar page, its showing that event
    time and date in toast.
     @Override
    public void onEventClick(WeekViewEvent event, RectF eventRect) {
    Toast.makeText(MainActivity.this, "Clicked " 
    + event.getName(), Toast.LENGTH_SHORT).show();
    Log.v("heal", "Clicked "+ event.getName()) ;
   }

注意:

  • 我需要在此日历视图中动态添加相同的事件。
  • 我不知道如何添加这个事件。
  • 我只是在onCreate() 中添加一个事件。但是,该事件并未显示在日历视图中,而是将值传递给该构造函数。谁能帮我解决这个问题。

【问题讨论】:

  • 请添加更多关于您究竟需要什么的信息。因为图片无法清楚地显示您的请求。
  • "任何人都可以在 android 中推荐任何自定义库。"询问库、工具等在 StackOverflow 上是题外话,无论是否打开赏金:要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话他们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • 嗨 Sergy,你能看到这个应用程序的屏幕截图吗play.google.com/store/apps/…
  • 嗨@harikrishnan,我们很乐意为您提供帮助,但我们尚无法理解您的需求。你能解释得更好吗?你需要一个可以添加/删除/更新事件的库吗?
  • 转到 android-arsenal.com 你可能有一些东西,在 StackOverflow 上请求一个库并不是像 @SergeyShustikov 所说的“最佳实践”。

标签: android android-calendar


【解决方案1】:

library you are using 支持动态事件添加。检查this sample 以获得更好的想法。

【讨论】:

  • 我正在使用这个库,但我希望日历应该从上午 9 点到下午 6 点开始.....你能帮我解决这个问题吗
  • Android 周视图非常适合您尝试做的事情。唯一的问题是它不支持可访问性
【解决方案2】:

试试这个,它会在用户点击一个空框时添加一个事件。您可以根据需要修改事件的参数。

public class MainActivity extends AppCompatActivity implements WeekView.EventClickListener,WeekView.EmptyViewClickListener, MonthLoader.MonthChangeListener {

WeekView mWeekView;
List<WeekViewEvent> events;
Calendar clickedTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWeekView=findViewById(R.id.weekView);
    mWeekView.setAccessibilityLiveRegion(MODE_APPEND);
    mWeekView.setNumberOfVisibleDays(7);

    events= new ArrayList<WeekViewEvent>();
    clickedTime=Calendar.getInstance();

    // Lets change some dimensions to best fit the view.
    mWeekView.setColumnGap((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()));
    mWeekView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()));
    mWeekView.setEventTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()));

    mWeekView.setMonthChangeListener(this);
    mWeekView.setEmptyViewClickListener(this);
    mWeekView.setOnEventClickListener(this);

}

@Override
public List<? extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {
    //Toast.makeText(this, "newMonth: "+newMonth+"  newYear: "+newYear, Toast.LENGTH_SHORT).show();

    Calendar startTime = (Calendar) clickedTime.clone();
    startTime.set(Calendar.MINUTE, 0);
    startTime.set(Calendar.MONTH, newMonth);
    startTime.set(Calendar.YEAR, newYear);
    Calendar endTime = (Calendar) startTime.clone();
    endTime.add(Calendar.HOUR, 1);
    WeekViewEvent event = new WeekViewEvent(1, "Event Name", startTime, endTime);
    //event.setColor(getResources().getColor(R.color.event_color_02));
    events.add(event);
    return events;
}

@Override
public void onEmptyViewClicked(final Calendar time) {
    clickedTime=(Calendar) time.clone();
    mWeekView.notifyDatasetChanged();
    Log.i("msg","Empty box has been filled successfully.");
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多