0

在此处输入图像描述


嗨,
如上图所示,我创建了一个自定义视图作为我的日历项目。在代码中,我重复了例如 50 次来创建日历。

服务器向我发送一个标志,显示应该选择哪些(在本例中选择 09 Jun)。

我的问题是当服务器发送一个不在屏幕上的日期(例如 6 月 25 日)时,该日期被选中(6 月 25 日的背景发生变化)但在屏幕上我看到上图(但现在 6 月 9 日的背景变为白色颜色和其他人一样)。

我正在寻找的东西是在屏幕中间显示 25 Jun 项目。我不知道它怎么可能。

任何建议将不胜感激。mu 自定义视图(小部件)的代码是这样的:

public class Calendar_Item extends RelativeLayout {

    private LayoutInflater mInflater;
    private RelativeLayout rlContainer;
    private TextView tvMonth;
    private TextView tvDay;
    private ImageView imDot;

    public Calendar_Item(Context context) {
        super(context);
        init(context);
    }

    public Calendar_Item(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public Calendar_Item(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }


    private void init(Context context) {
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        RelativeLayout calendarView = (RelativeLayout) mInflater.inflate(R.layout.calendar_item, null);
        addView(calendarView);

        rlContainer = (RelativeLayout)  calendarView.findViewById(R.id.cal_rlContainer);
        tvMonth     = (TextView)        calendarView.findViewById(R.id.cal_month);
        tvDay       = (TextView)        calendarView.findViewById(R.id.cal_date);
        imDot       = (ImageView)       calendarView.findViewById(R.id.cal_dot);
    }



    public void setMonth(String month) {
        tvMonth.setText(month);
    }

    public void setMonth(int resId) {
        tvMonth.setText(resId);
    }

    public CharSequence getMonth() {
        return tvMonth.getText();
    }

    public void setDay(String day) {
        tvDay.setText(day);
    }

    public void setDay(int resId) {
        tvDay.setText(resId);
    }

    public CharSequence getDay() {
        return tvDay.getText();
    }

    public void showDot() {
        imDot.setVisibility(View.VISIBLE);
    }

    public void hideDot() {
        imDot.setVisibility(View.INVISIBLE);
    }

    public void setTextColor(int color) {
        tvDay.setTextColor(color);
    }

    public void setBackgroundResource(int resid) {
        rlContainer.setBackgroundResource(resid);
    }

    public void setBackgroundDrawable(Drawable d) {
        rlContainer.setBackgroundDrawable(d);
    }

    public void setBackgroundColor(int color) {
        rlContainer.setBackgroundColor(color);
    }
}

布局 XML 代码:

    <?xml version="1.0" encoding="utf-8"?>

<HorizontalScrollView 
   xmlns:android            = "http://schemas.android.com/apk/res/android"
   android:layout_width     = "fill_parent" 
   android:layout_height    = "wrap_content"
   android:layout_below     = "@id/header"
   android:fadingEdgeLength = "30dip"
   android:fadingEdge       = "horizontal"
   android:scrollbars       = "none" >

   <LinearLayout 
        android:id              = "@+id/llCalendarItems"
        android:layout_width    = "wrap_content" 
        android:layout_height   = "wrap_content"
        android:orientation     = "horizontal" >

    </LinearLayout>
</HorizontalScrollView>

所有日历项目都位于 LinearLayout 内。

4

1 回答 1

0

最后我找到了使用延迟后方法的方法。

hsv = (HorizontalScrollView) findViewById(R.id.hsvCalendar);
hsv.postDelayed(new Runnable() {
    public void run() {
    hsv.scrollTo(selectedDay * 100, 0);
}
}, 100L);
于 2012-05-26T19:16:42.770 回答