Android,如何在屏幕中间选择自定义视图?

时间:2012-05-25 09:53:34

标签: android widget custom-component

enter image description here


嗨,
正如您在上面的图像中看到的,我创建了一个自定义视图作为我日历的项目。 在代码中,我重复了50次以创建日历。

服务器向我发送一个标志,显示应该选择哪一个(在这种情况下选择09 Jun)。

我的问题是当服务器发送一天不在屏幕上时(例如6月25日),该日期被选中(6月25日的背景改变)但在屏幕上我看到上面的图像(但现在是09月的背景像其他人一样变成白色)。

我正在寻找的东西是在屏幕中间显示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内。

1 个答案:

答案 0 :(得分:0)

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

hsv = (HorizontalScrollView) findViewById(R.id.hsvCalendar);
hsv.postDelayed(new Runnable() {
    public void run() {
    hsv.scrollTo(selectedDay * 100, 0);
}
}, 100L);