Android:直接在material-calendarview中更改Year

时间:2015-12-31 14:48:00

标签: android android-calendar

我正在使用https://github.com/prolificinteractive/material-calendarview

现在它正在改变点击右箭头或左箭头的月份 如何直接更改年份而不是更改月份 这是可能的Android默认日历视图。 下面是我的多产交互代码 - 日历

public class ActivityCalendar extends AppCompatActivity implements OnDateSelectedListener, OnMonthChangedListener {

    private static final DateFormat FORMATTER = SimpleDateFormat.getDateInstance();
    private MaterialCalendarView widget;
    private String zodiacSign = "";
    private HashMap<String,Integer> hashMapMonth =  new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_calendar);
        widget = (MaterialCalendarView)findViewById(R.id.calendarView);
        widget.setOnDateChangedListener(this);
        widget.setOnMonthChangedListener(this);

    }

    @Override
    public void onDateSelected(@NonNull MaterialCalendarView widget, @Nullable CalendarDay date, boolean selected) {
        String strDate = getSelectedDatesString();
        Intent returnIntent = new Intent();
        returnIntent.putExtra(TagClass.BIRTH_DATE, strDate);
        setResult(Activity.RESULT_OK, returnIntent);
        finish();
    }


    @Override
    public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {
        //noinspection ConstantConditions

    }

    private String getSelectedDatesString() {
        CalendarDay date = widget.getSelectedDate();
        if (date == null) {
            return "No Selection";
        }
        return FORMATTER.format(date.getDate());
    }
}

Layout.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityCalendar">


    <com.prolificinteractive.materialcalendarview.MaterialCalendarView
        android:id="@+id/calendarView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />


</LinearLayout>

2 个答案:

答案 0 :(得分:3)

现在这个库现在看起来似乎不可能。

为了做到这一点,您需要从github下载源代码,并将其作为库模块添加到项目中。

然后,我希望至少需要对这些组件进行更改:

另外,我的印象是,进行这些更改也会导致库中的市长重构。

答案 1 :(得分:0)

到目前为止,该库没有年份选择,但是您可以像我一样进行操作,并且它将显示带有年份过滤器的日历。

1)准备一些年份列表,您可以使用下面的方法,它将给您20年的列表,过去10年和未来10年。

private fun getListOfYears(): MutableList<Int> {
    val cal = Calendar.getInstance()
    cal.add(Calendar.YEAR, -10)
    val tenYearBack = cal.get(Calendar.YEAR)
    Log.i("yearList", "tenYearBack $tenYearBack")
    val nCal = Calendar.getInstance()
    nCal.add(Calendar.YEAR, 10)
    val tenYearAfter = nCal.get(Calendar.YEAR)
    Log.i("yearList", "tenYearAfter $tenYearAfter")
    val listOfYears = mutableListOf<Int>()
    for (i in tenYearBack..tenYearAfter) {
        listOfYears.add(i)
    }
    listOfYears.forEach {
        Log.i("yearList", "listOfYears $it")

    }
    return listOfYears

}

2)现在,将一个微调器添加到您的布局中,并在微调器的arrayAdapter中传递此列表,如下所示:

 val yearAdapter = ArrayAdapter<Int>(context, R.layout.year_spinner_item, listOfYears)

3)最后,使用onItemSeleted()方法中选定的年份值(即2019)调用此方法(用户定义),以更改calendarView的年份。 (注意:在下面的方法中,calendarView指的是CalendarView小部件。)

 override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
     selectedYear=listOfYears?.get(position)
    Utils.log("Selected Year is: $selectedYear")
    showSelectedYearCalendar(selectedYear)
}

private fun showSelectedYearCalendar(selectedYear: Int?) {

    val cal=Calendar.getInstance()
    cal.set(Calendar.YEAR,selectedYear!!)
    cal.set(Calendar.MONTH,0)

    val maxCal=Calendar.getInstance()
    maxCal.set(Calendar.YEAR,selectedYear)
    maxCal.set(Calendar.MONTH,11)

    calendarView.state().edit()
        .setMinimumDate(cal)
        .setMaximumDate(maxCal)
        .commit()
}