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

чтобы были видны только дата и стрелки.
Я не мог найти, должен ли я реализовать это самостоятельно или есть какой-то обходной путь или что-то еще View, которое может помочь мне достичь этого вида.
Заранее спасибо.
Вы должны создать свой собственный выбор даты. Возможно, этот учебник может вам помочь.
Вы можете получить его, создав собственное представление текущей даты, как показано ниже,
------- 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);
}
}
}
Это может помочь вам!
Я не смог найти, как сделать такой встроенный календарь с помощью 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
.
Я думаю, вам придется создать свой собственный выбор даты. Я не уверен, что вы можете настроить существующий DatePicker так, чтобы отображалась только верхняя часть.