2015-12-20 132 views
2

我的应用会保存约会并在Multibutton列表中显示它们,但我也使用GUI构建器创建了带有日历的屏幕,因为我想创建一个“日历视图”,以便用户可以看看日历和:Codename One - 自定义日历日按钮

1-看到了至少一个约会高亮(定制UIID)

2-见每个日历日每次约会,约会的次数,他已经为这一天,以及当然的日期。

我读过我可以通过覆盖updateButtonDayDate()createDay()来做到这一点,但我不知道如何在我的代码中做到这一点。你能告诉我一个例子吗?

enter image description here

+0

Felipe,我有一个与CN1应用程序类似的问题,并且会对代码感兴趣,以防您可以找到解决方案。你能发布一个片段吗? – rainer

回答

2

为您的日历类中重写updateButtonDayDate()createDay(),你需要创建一个扩展codenameone日历自定义日历(请确保您的扩展com.codename1.ui.calendar,而不是java.util)。

创建自定义日历类后,您将不得不废弃GUI生成器日历并在代码中创建一个日历。检查遵循下面的代码的使用例子:

import com.codename1.ui.Button; 
import com.codename1.ui.Calendar; 
import static com.codename1.ui.Component.CENTER; 

public class CustomCalendar extends Calendar { 

    @Override 
    protected Button createDay() { 
     //Customize your button here 
     Button day = new Button(); 
     day.setAlignment(CENTER); 
     day.setUIID("CalendarDay"); 
     day.setEndsWith3Points(false); 
     day.setTickerEnabled(false); 
     return day; 
    } 

    @Override 
    protected void updateButtonDayDate(Button dayButton, int currentMonth, int day) { 
     //Customize day values 
     dayButton.setText("" + day); 
    } 
} 

,并使用它,根据您的自定义版本声明一个新的日历:

CustomCalendar myCalendar = new CustomCalendar(); 
myContainer.add(myCalendar); 

您可以尝试在你的CustomCalendar所有样的事情,直到你发现有效的东西。按住Ctrl并点击日历以检查来源,并知道您可以覆盖哪些内容以及您无法覆盖哪些内容。

您甚至可以创建延伸Container的Calendar版本(尽管不可取)。

0

要根据列表中的项目选择或一个代号日历显示多个日期,一个选择是在日期列表和格式化日期按钮:

cal = new Calendar() { 

     @Override 
     protected void updateButtonDayDate(Button dayButton, int currentYear, int currentMonth, int day ) { 

      list.add(1); 
      list.add(12); 
      list.add(13); 
      list.add(14); 
      list.add(21); 


      for (int day_Number : list) { 

       if (day_Number == day) { 

        dayButton.setText("" + day); 
        dayButton.setUIID("mycalender-day"); 

       } 

     } 

    }; 

CSS文件中包含的格式类型:

mycalender-day { 

border: 1px solid whitesmoke; 
color:orange; 
font-family: "native:MainRegular"; 
font-size: 7pt; 
}