嗨,我闯民宅在日历应用的取消/完成按钮。 这2个按钮都寄托在上面,他们总是可见,即使您滚动底部的“形式”。
可我知道,是它操作栏的一部分吗? 如果是这样,应该如何实现是什么样子?
嗨,我闯民宅在日历应用的取消/完成按钮。 这2个按钮都寄托在上面,他们总是可见,即使您滚动底部的“形式”。
可我知道,是它操作栏的一部分吗? 如果是这样,应该如何实现是什么样子?
请记住,Android是开源的,并预装运行AOSP Android设备上的大多数应用程序都是开源的。
这里的项目: https://github.com/android/platform_packages_apps_calendar
是的,这是一个自定义动作条的设置,这里的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>
稍后设置上运行:
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);
希望帮助
只是为了分享...要落实到一个福尔摩斯片段,所用的LayoutInflater是oncreateView方法之一:
setHasOptionsMenu(true);
View actionBarButtons = inflater.inflate(R.layout.edit_event_custom_actionbar, new LinearLayout(getActivity()), false);
View cancelActionView = actionBarButtons.findViewById(R.id.action_cancel);
cancelActionView.setOnClickListener(mActionBarListener);
View doneActionView = actionBarButtons.findViewById(R.id.action_done);
doneActionView.setOnClickListener(mActionBarListener);
getSherlockActivity().getSupportActionBar().setHomeButtonEnabled(false);
getSherlockActivity().getSupportActionBar().setDisplayShowHomeEnabled(false);
getSherlockActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSherlockActivity().getSupportActionBar().setDisplayShowTitleEnabled(false);
getSherlockActivity().getSupportActionBar().setDisplayShowCustomEnabled(true);
getSherlockActivity().getSupportActionBar().setCustomView(actionBarButtons);
在操作栏监听器
private final View.OnClickListener mActionBarListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
onActionBarItemSelected(v.getId());
}
};
private boolean onActionBarItemSelected(int itemId) {
switch (itemId) {
case R.id.action_done:
save();
break;
case R.id.action_cancel:
System.err.println("cancel");
getActivity().onBackPressed();
break;
}
return true;
}
和布局是一样的前一个职位:
<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>
基于daniel_c05的回答,我能够在我的应用程序得到这个工作,但是我需要未在任何现有的答案记录在案,以得到它正常工作了几个额外的步骤。
1)您将需要从检索布局本身,下面引用为便于最初: https://github.com/android/platform_packages_apps_calendar/blob/master/res/layout/edit_event_custom_actionbar.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>
2)你也将需要的样式,从去用它,下面引用为了方便,最初: https://github.com/android/platform_packages_apps_calendar/blob/master/res/values/styles.xml
<style name="EditEventCustomActionButton" parent="android:style/Widget.Holo.Light.ActionButton">
<item name="android:layout_height">match_parent</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:focusable">true</item>
<item name="android:orientation">horizontal</item>
</style>
<style name="EditEventCustomActionButtonImage">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:padding">4dp</item>
</style>
<style name="EditEventCustomActionButtonText">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textAppearance">?android:attr/actionMenuTextAppearance</item>
<item name="android:textColor">?android:attr/actionMenuTextColor</item>
<item name="android:orientation">horizontal</item>
<item name="android:singleLine">true</item>
<item name="android:ellipsize">none</item>
<item name="android:padding">4dp</item>
</style>
3)您还需要抢按钮可绘制,或用自己的替换他们,他们在不同的文件夹绘制可在这里: https://github.com/android/platform_packages_apps_calendar/tree/master/res
4)现在唯一缺少的是,你可以找到在上面的链接,虽然我只是用我自己的,我已经定义了它们替换字符串资源。
5)要真正让它正常工作,我不得不做的不仅仅是充气多一点。 下面是我不得不把在OnCreate中得到它的工作的最低金额。 我与Xamarin合作,但我已经把上使用Java和Xamarin版本放心。 公平的警告:我没有测试过的Java版本。
Java的
// Inflate the custom view and add click handlers for the buttons
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);
// Retrieve an instance of the Activity's ActionBar
ActionBar actionBar = mContext.getActionBar();
// Hide the icon, title and home/up button
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
// Set the custom view and allow the bar to show it
actionBar.setCustomView(actionBarButtons);
actionBar.setDisplayShowCustomEnabled(true);
Xamarin C#
// Inflate layout for custom action bar with save & cancel buttons
var actionBarLayout = (LinearLayout)LayoutInflater.Inflate(
Resource.Layout.ActionBarSave, new LinearLayout(BaseContext), false);
var saveButton = actionBarLayout.FindViewById<LinearLayout (Resource.Id.action_done);
saveButton.Click += saveButton_Click;
var cancelButton = actionBarLayout.FindViewById<LinearLayout>(Resource.Id.action_cancel);
cancelButton.Click += cancelButton_Click;
// Hide the icon, title and home/up button
ActionBar.SetDisplayShowHomeEnabled(false);
ActionBar.SetDisplayHomeAsUpEnabled(false);
ActionBar.SetDisplayShowTitleEnabled(false);
// Set the custom view and allow the bar to show it
var layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MatchParent,
ActionBar.LayoutParams.MatchParent);
ActionBar.SetCustomView(actionBarLayout, layoutParams);
ActionBar.SetDisplayShowCustomEnabled(true);
也就是说这是需要我得到它的工作一切。 我试图将尽可能全面,希望这将节省从谷歌上搜索,试图找到其他答案缺少的步骤的人。