📜  如何在 Android 中实现自定义日历?

📅  最后修改于: 2022-05-13 01:55:17.070000             🧑  作者: Mango

如何在 Android 中实现自定义日历?

如今,在大多数应用程序中,我们在大多数应用程序中看到日历,用于显示出生日期或任何约会应用程序。借助日历视图在应用程序中显示日期可提供更好的用户体验。在本文中,我们将为我们的 android 应用程序制作一个自定义日历。在这个自定义日历中,我们突出显示了当前日期和其他对我们来说似乎很重要的日期。

我们将在本文中构建什么?

在这里,我们为自定义日历添加了所需的依赖项,然后使用日历视图对其进行处理。这是我们将要构建的应用程序的示例视频。请注意,我们将用Java语言实现这个项目。

分步实施

步骤 1:创建一个新项目

  • 打开一个新项目。
  • 我们将使用Java语言开发 Empty Activity。保持所有其他选项不变。
  • 您可以在方便时更改项目的名称。
  • 将有两个名为activity_main.xmlMainActivity 的默认文件。Java

如果您不知道如何在 Android Studio 中创建新项目,可以参考如何在 Android Studio 中创建/启动新项目?

第 2 步:添加所需的依赖项-

导航到Gradle Scripts -> build.gradle(Module)并在其中实现以下依赖项-

implementation 'org.naishadhparmar.zcustomcalendar:zcustomcalendar:1.0.1'

第 3 步:处理 XML 文件

使用actvity_main.xml 文件:

导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是 activity_main.xml 文件的代码。

XML


  
    
  


XML


  
    
        
        
  
    
  


XML


  
    
        
        
  
    
  


XML


  
    
        
        
  
    
  


XML


  
    
        
        
  
    
  


Java
package com.example.customcalendar;
  
import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
  
import org.naishadhparmar.zcustomcalendar.CustomCalendar;
import org.naishadhparmar.zcustomcalendar.OnDateSelectedListener;
import org.naishadhparmar.zcustomcalendar.Property;
  
import java.util.Calendar;
import java.util.HashMap;
  
public class MainActivity extends AppCompatActivity {
  
    // Initialize variable
    CustomCalendar customCalendar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // assign variable
        customCalendar=findViewById(R.id.custom_calendar);
  
        // Initialize description hashmap
        HashMap descHashMap=new HashMap<>();
          
        // Initialize default property
        Property defaultProperty=new Property();
         
        // Initialize default resource
        defaultProperty.layoutResource=R.layout.default_view;
          
        // Initialize and assign variable
        defaultProperty.dateTextViewResource=R.id.text_view;
          
        // Put object and property
        descHashMap.put("default",defaultProperty);
  
        // for current date
        Property currentProperty=new Property();
        currentProperty.layoutResource=R.layout.current_view;
        currentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("current",currentProperty);
  
        // for present date
        Property presentProperty=new Property();
        presentProperty.layoutResource=R.layout.present_view;
        presentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("present",presentProperty);
  
        // For absent
        Property absentProperty =new Property();
        absentProperty.layoutResource=R.layout.absent_view;
        absentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("absent",absentProperty);
  
        // set desc hashmap on custom calendar
        customCalendar.setMapDescToProp(descHashMap);
  
        // Initialize date hashmap
        HashMap dateHashmap=new HashMap<>();
          
        // initialize calendar
        Calendar calendar=  Calendar.getInstance();
  
        // Put values
        dateHashmap.put(calendar.get(Calendar.DAY_OF_MONTH),"current");
        dateHashmap.put(1,"present");
        dateHashmap.put(2,"absent");
        dateHashmap.put(3,"present");
        dateHashmap.put(4,"absent");
        dateHashmap.put(20,"present");
        dateHashmap.put(30,"absent");
  
        // set date
        customCalendar.setDate(calendar,dateHashmap);
  
        customCalendar.setOnDateSelectedListener(new OnDateSelectedListener() {
            @Override
            public void onDateSelected(View view, Calendar selectedDate, Object desc) {
                // get string date
                String sDate=selectedDate.get(Calendar.DAY_OF_MONTH)
                        +"/" +(selectedDate.get(Calendar.MONTH)+1)
                        +"/" + selectedDate.get(Calendar.YEAR);
  
                // display date in toast
                Toast.makeText(getApplicationContext(),sDate, Toast.LENGTH_SHORT).show();
            }
        });
    }
}


导航到应用 > res > 布局 > 右键单击 > 新建 > 布局资源文件并将其命名为缺席_view.xml。在其中使用以下代码-

XML



  
    
        
        
  
    
  

导航到应用 > res > 布局 > 右键单击 > 新建 > 布局资源文件并将其命名为 present_view.xml。在其中使用以下代码-

XML



  
    
        
        
  
    
  

导航到应用 > res > 布局 > 右键单击 > 新建 > 布局资源文件并将其命名为 current_view.xml。在其中使用以下代码

XML



  
    
        
        
  
    
  

导航到应用 > res > 布局 > 右键单击 > 新建 > 布局资源文件并将其命名为 default_view.xml。在其中使用以下代码-

XML



  
    
        
        
  
    
  

第 4 步:使用 MainActivity。Java

转到 MainActivity。 Java文件并参考以下代码。下面是 MainActivity 的代码。 Java文件。

Java

package com.example.customcalendar;
  
import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
  
import org.naishadhparmar.zcustomcalendar.CustomCalendar;
import org.naishadhparmar.zcustomcalendar.OnDateSelectedListener;
import org.naishadhparmar.zcustomcalendar.Property;
  
import java.util.Calendar;
import java.util.HashMap;
  
public class MainActivity extends AppCompatActivity {
  
    // Initialize variable
    CustomCalendar customCalendar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // assign variable
        customCalendar=findViewById(R.id.custom_calendar);
  
        // Initialize description hashmap
        HashMap descHashMap=new HashMap<>();
          
        // Initialize default property
        Property defaultProperty=new Property();
         
        // Initialize default resource
        defaultProperty.layoutResource=R.layout.default_view;
          
        // Initialize and assign variable
        defaultProperty.dateTextViewResource=R.id.text_view;
          
        // Put object and property
        descHashMap.put("default",defaultProperty);
  
        // for current date
        Property currentProperty=new Property();
        currentProperty.layoutResource=R.layout.current_view;
        currentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("current",currentProperty);
  
        // for present date
        Property presentProperty=new Property();
        presentProperty.layoutResource=R.layout.present_view;
        presentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("present",presentProperty);
  
        // For absent
        Property absentProperty =new Property();
        absentProperty.layoutResource=R.layout.absent_view;
        absentProperty.dateTextViewResource=R.id.text_view;
        descHashMap.put("absent",absentProperty);
  
        // set desc hashmap on custom calendar
        customCalendar.setMapDescToProp(descHashMap);
  
        // Initialize date hashmap
        HashMap dateHashmap=new HashMap<>();
          
        // initialize calendar
        Calendar calendar=  Calendar.getInstance();
  
        // Put values
        dateHashmap.put(calendar.get(Calendar.DAY_OF_MONTH),"current");
        dateHashmap.put(1,"present");
        dateHashmap.put(2,"absent");
        dateHashmap.put(3,"present");
        dateHashmap.put(4,"absent");
        dateHashmap.put(20,"present");
        dateHashmap.put(30,"absent");
  
        // set date
        customCalendar.setDate(calendar,dateHashmap);
  
        customCalendar.setOnDateSelectedListener(new OnDateSelectedListener() {
            @Override
            public void onDateSelected(View view, Calendar selectedDate, Object desc) {
                // get string date
                String sDate=selectedDate.get(Calendar.DAY_OF_MONTH)
                        +"/" +(selectedDate.get(Calendar.MONTH)+1)
                        +"/" + selectedDate.get(Calendar.YEAR);
  
                // display date in toast
                Toast.makeText(getApplicationContext(),sDate, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

这是我们应用程序的最终输出。

输出: