当前位置: 首页 > 知识库问答 >
问题:

更改日历上单元格的颜色

慕容嘉熙
2023-03-14

我已经了解到您不能将事件添加到默认的calendarview(它只是在用户的默认日历中处理),所以我使用了caldroid https://github.com/roomorama/caldroid/blob/master/readme.md,到目前为止,它对文档很有帮助,但当涉及到一件事时,我感到迷茫。

我想做的是改变任何日期的颜色,有一个事件。文档中说要制作一个drawable并将其放入单元格中,但我更不知道该如何做,所以我认为改变单元格的颜色会更容易。

我当前的代码如下所示

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction;
import android.text.format.DateUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.roomorama.caldroid.CaldroidFragment;
import com.roomorama.caldroid.CaldroidListener;

import java.util.Calendar;
import java.util.Date;


public class CalendarActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calendar);

    CaldroidFragment caldroidFragment = new CaldroidFragment();
    Bundle args = new Bundle();
    Calendar cal = Calendar.getInstance();
    args.putInt(CaldroidFragment.MONTH, cal.get(Calendar.MONTH) + 1);
    args.putInt(CaldroidFragment.YEAR, cal.get(Calendar.YEAR));
    caldroidFragment.setArguments(args);

    FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.calendarLayout, caldroidFragment);
    t.commit();



    final CaldroidListener listener = new CaldroidListener() {

        @Override
        public void onSelectDate(Date date, View view) {
            Toast.makeText(getApplicationContext(), date.toString(),
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onChangeMonth(int month, int year) {
            String text = "month: " + month + " year: " + year;
            Toast.makeText(getApplicationContext(), text,
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onLongClickDate(Date date, View view) {
            Toast.makeText(getApplicationContext(),
                    "Long click " + date.toString(),
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCaldroidViewCreated() {
            Toast.makeText(getApplicationContext(),
                    "Caldroid view is created",
                    Toast.LENGTH_SHORT).show();
        }

    };

    caldroidFragment.setCaldroidListener(listener);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_calendar, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

我刚刚偶然发现了这段代码,并且正在实现它的过程中。

@override public void onSelectDate(Date Date,View View){toast.maketext(getApplicationContext(),formatter.format(Date),toast.length_short).show();

    }

    @Override
    public void onChangeMonth(int month, int year) {
        String text = "month: " + month + " year: " + year;
        Toast.makeText(getApplicationContext(), text,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLongClickDate(Date date, View view) {

            Toast.makeText(getApplicationContext(),
                "Long click " + formatter.format(date),
                Toast.LENGTH_SHORT).show();Calendar cal = Calendar.getInstance();
        Intent intent = new Intent(Intent.ACTION_EDIT);  
        intent.setType("vnd.android.cursor.item/event");
        intent.putExtra("beginTime", System.currentTimeMillis());
        intent.putExtra("endTime", System.currentTimeMillis()+60000);
        intent.putExtra("title", "hiii");
        startActivity(intent);
        caldroidFragment.refreshView();
    }

    @Override
    public void onCaldroidViewCreated() {
        if (caldroidFragment.getLeftArrowButton() != null) {
            Toast.makeText(getApplicationContext(),
                    "Caldroid view is created", Toast.LENGTH_SHORT)
                    .show();
        }
    }

};final CaldroidListener listener = new CaldroidListener() {

    @Override
    public void onSelectDate(Date date, View view) {
        Toast.makeText(getApplicationContext(), formatter.format(date),
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onChangeMonth(int month, int year) {
        String text = "month: " + month + " year: " + year;
        Toast.makeText(getApplicationContext(), text,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLongClickDate(Date date, View view) {

            Toast.makeText(getApplicationContext(),
                "Long click " + formatter.format(date),
                Toast.LENGTH_SHORT).show();Calendar cal =     Calendar.getInstance();
        Intent intent = new Intent(Intent.ACTION_EDIT);  
        intent.setType("vnd.android.cursor.item/event");
        intent.putExtra("beginTime", System.currentTimeMillis());
        intent.putExtra("endTime", System.currentTimeMillis()+60000);
        intent.putExtra("title", "hiii");
        startActivity(intent);
        caldroidFragment.refreshView();
    }

    @Override
    public void onCaldroidViewCreated() {
        if (caldroidFragment.getLeftArrowButton() != null) {
            Toast.makeText(getApplicationContext(),
                    "Caldroid view is created", Toast.LENGTH_SHORT)
                    .show();
        }
    }

};

共有1个答案

亢正德
2023-03-14
 private void setCustomResourceForDates() {


        Map<Date, Drawable> hm = new HashMap<>();
        hm.clear();

        // Put elements to the map

        for (int i = 0; i < offdays.size(); i++) {

            hm.put(ParseDate(offdays.get(i)), getResources().getDrawable(R.drawable.roundedred));

        }


        if (caldroidFragment != null) {

            if (offdays.size() > 0) {
                caldroidFragment.setBackgroundDrawableForDates(hm);
            }

        }

        caldroidFragment.refreshView();
    }
 类似资料:
  • 问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta

  • 问题内容: 我试图使自己熟悉JTables,TableModels,JTableHeaders,渲染器等。我试图制作一个简单的虚拟表(出于练习目的),看起来像这样: 我还希望B2单元格-并且只有该单元格-具有蓝色(Color.BLUE)背景-所有其他单元格都可以具有自动分配的Swing默认颜色。 我的代码在下面,并且基于我在本网站和整个互联网上发现的无数示例。但是我没有得到想要的结果。相反,我得到

  • 我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢

  • 问题内容: 我在GUI应用程序中使用JTable作为网格来表示游戏的位置。我希望代表对象某个位置的表的单元格具有某种颜色,并且在某些操作上希望移动的对象(即在Grid / JTable中四处移动的颜色单元格)。我知道我可以通过创建一个可扩展的类来更改单元格的颜色,这是唯一的方法吗?还是有一种更简单的方法来改变单元格颜色?对于这样的应用程序,JXTable是否比JTable好? 编辑: 我没有包括以

  • 我想改变JTable的单元格背景颜色,想从MySQL数据库中获取数据。 我在MySQL中使用一个数据表,它有一个状态字段。如果状态为1,则单元格背景颜色应为红色;如果状态为0,则应更改为红色。

  • 我正在使用这个引导表插件:http://bootstrap-table.wenzhixin.net.cn/documentation/ 这张桌子运转良好。我正在使用ajax推送一个json数组。桌子完成后,我有一个按钮。当点击此按钮时,它将调用一些函数,并需要更新一些单元格颜色。下面是一个代码示例: 使用我可以更改当前值。。。有没有办法改变背景颜色而不是值?