如何获取事件时间表的颜色?

Posted

技术标签:

【中文标题】如何获取事件时间表的颜色?【英文标题】:How to get color of time table on events? 【发布时间】:2016-03-06 14:51:46 【问题描述】:

我正在创建一个事件。我也在创建时间表。事件是根据时间表 ID 创建的。我为显示事件而创建的动态事件视图。

我为此事件和时间表创建了两个表。并从数据库加载事件。 现在我已经加载了时间表女巫启用的事件。我已经为时间表设置了颜色。我想在具有尊重时间表 ID 的事件上显示此颜色。

我尝试使用时间表的对象加载此颜色。

但我使用了 for 循环,因此它会向所有事件显示上次时间表的颜色。

如何为具有尊重时间表 ID 的事件设置颜色?

星期一片段:

public class Mon extends Fragment 



    private EventTableHelper mDb;
    private Intent i;
    private ViewGroup dayplanView;
    private int minutesFrom,minutesTo;
    private List<EventData> events;
    private List<View> list;
    private List<TimeTable> tables;
    private LayoutInflater inflater;
    public  boolean editMode;
    private RelativeLayout container;
    private View eventView;
    private TimeTableHelper tableHelper;
    int color;

    private boolean mCheckFragment;
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.fragment_mon, container, false);
        list = new ArrayList<View>();


        dayplanView = (ViewGroup) view.findViewById(R.id.hoursRelativeLayout);

        showEvents();


        mCheckFragment = true;


        return view;
    

    private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title,String location,final int id,int color,String notification) 

       eventView = inflater.inflate(R.layout.event_view, dayplanView, false);
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams();

        container = (RelativeLayout) eventView.findViewById(R.id.container);
        TextView tvTitle = (TextView) eventView.findViewById(R.id.textViewTitle);
        list.add(eventView);

        ImageView notify = (ImageView) eventView.findViewById(R.id.notify);


        ((GradientDrawable) eventView.getBackground()).setColor(color);

        tvTitle.setTextColor(Color.parseColor("#FFFFFF"));


        if (tvTitle.getParent() != null)
           ((ViewGroup) tvTitle.getParent()).removeView(tvTitle);

        if(notification == null)
        
            notify.setVisibility(View.GONE);
        

        else 
            notify.setVisibility(View.VISIBLE);
        


        if(location.equals(""))
        
            tvTitle.setText("Event : " + title);
         else 
            tvTitle.setText("Event : " + title + " (At : " + location +")");
        
        int distance = (toMinutes - fromMinutes);
        layoutParams.topMargin = dpToPixels(fromMinutes + 9);
        layoutParams.height = dpToPixels(distance);

        eventView.setLayoutParams(layoutParams);
        dayplanView.addView(eventView);
        container.addView(tvTitle);



        eventView.setOnClickListener(new View.OnClickListener() 

            @Override
            public void onClick(View v) 

                i = new Intent(getActivity(), AddEventActivity.class);
                editMode = true;
                i.putExtra("EditMode", editMode);
                i.putExtra("id", id);
                startActivityForResult(i, 1);

            
        );
    

    public void showEvents()
    
        tableHelper = new TimeTableHelper(getActivity());
        tables = tableHelper.getAllTables();

        for (TimeTable table : tables) 

            int tableId = table.getId();
            int status = table.getStatus();
            if(status == 1) 
                color = table.getTableColor();
            
            mDb = new EventTableHelper(getActivity());
            events = mDb.getTimeTableEvents("Mon", tableId);
        

        for (EventData eventData : events) 

            int id = eventData.getId();
            String datefrom = eventData.getFromDate();

            if (datefrom != null) 
                String[] times = datefrom.substring(11, 16).split(":");
                minutesFrom = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
            
            String title = eventData.getTitle();
            String location = eventData.getLocation();
            String dateTo = eventData.getToDate();

            String notification = eventData.getNotificationTime();

            if (dateTo != null) 
                //times = dateTo.substring(11,16).split(":");
                String[] times1 = dateTo.substring(11, 16).split(":");
                minutesTo = Integer.parseInt(times1[0]) * 60 + Integer.parseInt(times1[1]);
            
            createEvent(inflater, dayplanView, minutesFrom, minutesTo, title, location, id, color, notification);
            id++;
        


    

    public void removeView()
    
        for(int i=0; i<list.size(); i++)
        
            View view = (View)list.get(i);
            dayplanView.removeView(view);
        
    

    private int dpToPixels(int dp) 
        return (int) (dp * getResources().getDisplayMetrics().density);
    

    @Override
    public void onResume()
    

        super.onResume();

        if(mCheckFragment)
        
            removeView();
            showEvents();

        

    


编辑:

   public void showEvents()

    tableHelper = new TimeTableHelper(getActivity());
    tables = tableHelper.getAllTables();
    int color = 0;
    for (TimeTable table : tables) 

        int tableId = table.getId();
        int status = table.getStatus();

        mDb = new EventTableHelper(getActivity());
        events = mDb.getTimeTableEvents("Mon", tableId);


        for (EventData eventData : events) 

            int id = eventData.getId();
            String datefrom = eventData.getFromDate();

            if (datefrom != null) 
                String[] times = datefrom.substring(11, 16).split(":");
                minutesFrom = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
            
            String title = eventData.getTitle();
            String location = eventData.getLocation();
            String dateTo = eventData.getToDate();

            color = table.getTableColor();

            String notification = eventData.getNotificationTime();

            if (dateTo != null) 
                //times = dateTo.substring(11,16).split(":");
                String[] times1 = dateTo.substring(11, 16).split(":");
                minutesTo = Integer.parseInt(times1[0]) * 60 + Integer.parseInt(times1[1]);
            
            createEvent(inflater, dayplanView, minutesFrom, minutesTo, title, location, id, color, notification);
            id++;
        

    

谢谢你..

【问题讨论】:

【参考方案1】:

尝试将两个 for 循环合并在一起,看看是否可行。 除了颜色,当它进入第二个 for 循环时,看起来事件也被设置为最后一个表。

    for(TimeTable table : tables) 
        // code from table for loop
        // ...
        for(EventData eventData : events) 
            // code from event for loop.
            // ...
        
    

【讨论】:

是的,我也这么认为并尝试了这个。但仍然没有帮助。请检查已编辑的问题。 @DMO-NZ 最后一行,为什么要增加id?它被重置为下一个 eventData 的 id.. 只是想知道.. 这重要吗? 不,实际上我之前尝试过不同的方法来设置 ID。忘记删除了。它从未使用过。 在原来的for循环中,你在设置颜色之前检查了表格的状态; 是的,我试着检查是否有任何区别,如果我喜欢这样做,但结果是一样的。

以上是关于如何获取事件时间表的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中获取应用程序字体颜色

如何在 React Native 中从屏幕上的像素获取颜色?

在 Swift 中从 EKEvent 获取日历颜色

如何获取具有已知颜色名称的颜色 ID

如何获取对话框/窗口的背景颜色?

如何获取按钮的背景颜色