Как показать только строку даты в CalendarView? - PullRequest
1 голос
/ 06 июля 2019

Я хочу отобразить только эту часть CalendarView без календаря

this

itself, чтобы были видны только дата и стрелки.


Я не мог найти, должен ли я реализовать это сам или есть какой-то обходной путь или какой-то другой View, который может помочь мне достичь этого вида.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

Вы можете получить его, создав пользовательский режим просмотра текущей даты, как показано ниже:

------- Activity_main.xml --------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="@dimen/margin_60dp"
    android:orientation="horizontal"
    android:paddingTop="@dimen/margin_10dp"
    android:paddingBottom="@dimen/margin_10dp">
    <ImageButton
        android:id="@+id/backBtn"
        android:layout_width="@dimen/margin_40dp"
        android:layout_height="@dimen/margin_40dp"
        android:layout_margin="@dimen/margin_10dp"
        android:layout_gravity="center"
        android:background="@drawable/ic_action_back" />
    <TextView
        android:id="@+id/current_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Current Date"
        android:textSize="18sp"
        android:textStyle="bold" />
    <ImageButton
        android:id="@+id/nextBtn"
        android:layout_width="@dimen/margin_40dp"
        android:layout_gravity="center"
        android:layout_height="@dimen/margin_40dp"
        android:layout_margin="@dimen/margin_10dp"
        android:background="@drawable/ic_action_next" />
</LinearLayout>

------ MainActivity.java ------

public class MainActivity extends AppCompatActivity {
ImageButton nextBtn, backBtn;
TextView CurrentDate;
private static final int MAX_CALENDAR_DAYS = 42;
Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
List<Date> dates = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM YYYY", Locale.ENGLISH);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    backBtn = (ImageButton) findViewById(R.id.backBtn);
    nextBtn = (ImageButton) findViewById(R.id.nextBtn);
    CurrentDate = (TextView) findViewById(R.id.current_date);
    backBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calendar.add(Calendar.MONTH, -1);
            SetUpCalendar();
        }
    });
    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calendar.add(Calendar.MONTH, 1);
            SetUpCalendar();
        }
    });
}
private void SetUpCalendar() {
    String currentDate = dateFormat.format(calendar.getTime());
    CurrentDate.setText(currentDate);
    dates.clear();
    Calendar monthCalendar = (Calendar) calendar.clone();
    monthCalendar.set(Calendar.DAY_OF_MONTH, 1);
    int FirstDayofMonth = monthCalendar.get(Calendar.DAY_OF_WEEK) - 1;
    monthCalendar.add(Calendar.DAY_OF_MONTH, -FirstDayofMonth);
    while (dates.size() < MAX_CALENDAR_DAYS) {
        dates.add(monthCalendar.getTime());
        monthCalendar.add(Calendar.DAY_OF_MONTH, 1);
    }
}

}

Это может помочь вам!

1 голос
/ 06 июля 2019

Вы должны создать свой собственный выбор даты.Возможно этот урок может вам помочь.

0 голосов
/ 11 июля 2019

Я не мог найти, как создать такой встроенный календарь, используя CalendarView, поэтому я придумал свою собственную реализацию:
------- inline_calendar.xml -------

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:id="@+id/calendar_prev_button"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_marginEnd="40dp"
        android:layout_marginRight="40dp"
        android:background="@drawable/ic_baseline_chevron_left_24px" />

    <TextView
        android:id="@+id/display_date"
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:gravity="center"
        android:text="Feb 2019"
        android:textAppearance="@android:style/TextAppearance.Large"
        android:textColor="#222222"
        android:textSize="30sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/calendar_next_button"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        android:background="@drawable/ic_baseline_chevron_right_24px" />
</LinearLayout>

------- InlineCalendar.java -------

public class InlineCalendar extends LinearLayout {
    private Button btnPrev;
    private Button btnNext;
    private TextView tvDate;
    private Calendar calendar = Calendar.getInstance();
    private MyOnClickListener myOnClickListener;
    private static final String TAG = "InlineCalendar";

    public InlineCalendar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initControl(context);
        initInterface();
    }

    public void setListener(MyOnClickListener myOnClickListener) {
        this.myOnClickListener = myOnClickListener;
    }

    public Calendar getCalendar() {
        return calendar;
    }

    private void assignUiElements() {
        // layout is inflated, assign local variables to components
        btnPrev = findViewById(R.id.calendar_prev_button);
        btnNext = findViewById(R.id.calendar_next_button);
        tvDate = findViewById(R.id.display_date);
    }

    private void initInterface() {
        myOnClickListener = new MyOnClickListener() {
            @Override
            public void onClickListener() {
            }
        };
    }

    private void assignClickHandlers() {
        assignOnClickListener(btnPrev, -1);
        assignOnClickListener(btnNext, 1);
        btnNext.setVisibility(View.INVISIBLE);
    }

    private void assignOnClickListener(final Button btn, final int addMonth) {
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                updateCalendar(addMonth);
                myOnClickListener.onClickListener();
                boolean condition = (Calendar.getInstance().get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&
                        Calendar.getInstance().get(Calendar.YEAR) == calendar.get(Calendar.YEAR));
                btnNext.setVisibility(condition ? View.INVISIBLE : View.VISIBLE);
            }
        });
    }

    private void initControl(Context context) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.inline_calendar, this);

        assignUiElements();
        assignClickHandlers();

        updateCalendar(0);
    }

    public void updateCalendar(int addMonth) {
        calendar.add(Calendar.MONTH, addMonth);
        tvDate.setText(calendarToString());
    }

    private String calendarToString() {
        SimpleDateFormat date_format = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
        return date_format.format(calendar.getTime());
    }

    public interface MyOnClickListener {
        void onClickListener();
    }
}

Чтобы использовать InlineCalendar, достаточно включить в свой код Activity's XML следующий код:

<com.example.Activity.InlineCalendar
        android:id="@+id/inlineCalendar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

Кроме того, вы можете назначить пользовательский слушатель предыдущей и следующей кнопке, используя метод setListener(MyOnClickListener myOnClickListener), как в CalendarView

...