Remember that Android is open source, and most apps preinstalled on an android device running aosp are open source.
Here's the project: https://github.com/android/platform_packages_apps_calendar
Yes, it is a custom ActionBar setup, here's the XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:dividerPadding="12dip
android:showDividers="middle">
<!-- id must match corresponding menu item id -->
<LinearLayout
android:id="@+id/action_cancel
style="@style/EditEventCustomActionButton">
<ImageView
android:src="@drawable/ic_menu_cancel_holo_light"
style="@style/EditEventCustomActionButtonImage" />
<TextView
android:text="@string/discard_label"
style="@style/EditEventCustomActionButtonText" />
</LinearLayout>
<!-- id must match corresponding menu item id -->
<LinearLayout
android:id="@+id/action_done"
style="@style/EditEventCustomActionButton">
<ImageView
android:src="@drawable/ic_menu_done_holo_light"
style="@style/EditEventCustomActionButtonImage" />
<TextView
android:text="@string/save_label"
style="@style/EditEventCustomActionButtonText" />
</LinearLayout
</LinearLayout>
That is later set on runtime:
View actionBarButtons = inflater.inflate(R.layout.edit_event_custom_actionbar,
new LinearLayout(mContext), false);
View cancelActionView = actionBarButtons.findViewById(R.id.action_cancel);
cancelActionView.setOnClickListener(mActionBarListener);
View doneActionView = actionBarButtons.findViewById(R.id.action_done);
doneActionView.setOnClickListener(mActionBarListener);
mContext.getActionBar().setCustomView(actionBarButtons);
Hope that helped
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…