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 に答える