我ActionBarActivity有NavigationDrawer和使用support_v7 Toolbar的动作条.在我的一个片段工具栏中有自定义视图.在其他片段中Toolbar应显示标题.
如何Toolbar从片段中获取自定义实例?我可以使用ActionBar getActivity().getActionBar(),但是如果我调用setTitle()这个实例ActionBar它什么都不做.
UPD:
就我而言
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(正如MrEngineer13所说)在第一次片段创建时不起作用,因为我从onHiddenChanged()调用它.现在我向onCreateView()添加更多一个,它工作正常.
android android-fragments android-actionbar android-support-library android-toolbar
我正在尝试添加SearchView对Android 3.0+ ActionBar的支持,但我无法让它OnCloseListener工作.
这是我的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
searchView = (SearchView) menu.findItem(R.id.search_textbox).getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
searchLibrary(newText);
return false;
}
@Override
public boolean onQueryTextSubmit(String query) { return false; }
});
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public boolean onClose() {
System.out.println("Testing. 1, 2, 3...");
return false;
}
});
return true;
}
Run Code Online (Sandbox Code Playgroud)
搜索效果很好,每个人都在工作,除了OnCloseListener.没有任何东西被打印到Logcat.这是我按下"关闭"按钮时的Logcat:
02-17 13:01:52.914: I/TextType(446): TextType = 0x0
02-17 13:01:57.344: I/TextType(446): TextType = 0x0
02-17 13:02:02.944: I/TextType(446): …Run Code Online (Sandbox Code Playgroud) android android-3.0-honeycomb android-4.0-ice-cream-sandwich android-actionbar
ActionBar有一个名为"SearchView"的小部件.当它不使用时,它看起来像这样:

当它在使用时,它看起来像这样:

我想(当然是以编程方式)打开searchview(使其"正在使用").
我尝试了几个功能,例如:
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(this);
searchView.performClick();
searchView.requestFocus();
Run Code Online (Sandbox Code Playgroud)
但这些都没有奏效......
XML中的SearchView:
<item android:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud) 所以现在Android 5.0发布了,我想知道如何实现动画操作栏图标.
这个库在这里实现它很好但是因为appcompat v7库有它如何实现它?
该库在themes.xml中引用它
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Run Code Online (Sandbox Code Playgroud)
在这种风格下
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
Run Code Online (Sandbox Code Playgroud)
UPDATE
我使用v7 DrawerToggle实现了这个功能.但是我无法设计它.请帮忙
我在v7 styles_base.xml中找到了它的样式
<style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="">
<item name="color">?android:attr/textColorSecondary</item>
<item name="thickness">2dp</item>
<item name="barSize">18dp</item>
<item name="gapBetweenBars">3dp</item>
<item name="topBottomBarArrowSize">11.31dp</item>
<item name="middleBarArrowSize">16dp</item>
<item name="drawableSize">24dp</item>
<item name="spinBars">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我把它添加到我的样式中并且没有用.也添加到我的attr.xml
<declare-styleable name="DrawerArrowToggle">
<!-- The drawing color for the bars -->
<attr name="color" format="color"/>
<!-- Whether bars should rotate or not during transition -->
<attr name="spinBars" format="boolean"/>
<!-- The total size of the drawable -->
<attr name="drawableSize" format="dimension"/>
<!-- The max gap …Run Code Online (Sandbox Code Playgroud) android android-appcompat android-actionbar drawertoggle android-5.0-lollipop
所以,我刚刚将我的代码库更新为Lollipop,而且我遇到了Action Bar的问题.我正在使用AppCompat和ActionBarActivity,并为自定义视图充气.似乎自定义视图不再占据屏幕的整个宽度,在左侧留下一条细条
过去的样子
它看起来现在的样子
这是我用来设置Action Bar的代码.有人有主意吗?
final ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setCustomView(R.layout.action_bar_content_search_custom_view);
actionBar.setBackgroundDrawable(null);
// actionBar.setStackedBackgroundDrawable(null);
TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_title);
title.setText(R.string.youtube);
ImageView back = (ImageView) actionBar.getCustomView().findViewById(R.id.action_bar_back);
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
Run Code Online (Sandbox Code Playgroud)
编辑
取出自定义视图并更改背景现在占用整个宽度.问题是,我们如何让CustomView占用ActionBar的整个宽度?
android android-appcompat android-actionbar android-5.0-lollipop
我已经对这个主题做了一些研究,我找不到一个完整的解决方案,所以,一步一步,经过一些反复试验,我终于找到了如何实现这些结果:透明或有色Actionbar和Statusbar.请看下面的答案.
android android-appcompat android-actionbar android-toolbar android-statusbar
使用新的设计库有几个新的布局,如果开发人员愿意,可以改变工具栏的行为方式.由于不同的片段具有不同的行为和目标,例如,具有折叠工具栏的画廊片段显示重要照片,或者没有滚动视图的片段,不需要appbarlayout来隐藏工具栏,在活动中具有单个工具栏可以证明很难.
那么,我应该将工具栏移动到每个片段吗?如果是这样,我每次显示片段时都必须设置supportActionBar,并且还要在片段中引用活动,这会使片段的独立性无效.如果我单独将Activity放在Activity中,我必须为每个片段中的每种行为定义多个布局.什么是最好的方法?
android android-fragments android-activity android-actionbar
我想在操作栏中显示自定义搜索(我正在使用ActionBarSherlock).
我明白了:

但我想让自定义布局(edittext字段)占用整个可用宽度.
我按照这里的建议实现了自定义布局.
有我的自定义布局search.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="?attr/actionButtonStyle"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_horizontal"
android:focusable="true" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|fill_horizontal" >
<EditText
android:id="@+id/search_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|center"
android:background="@drawable/bg_search_edit_text"
android:imeOptions="actionSearch"
android:inputType="text" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:src="@drawable/ic_search_arrow" />
</FrameLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
并在MyActivity:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_action_search);
LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.search, null);
actionBar.setCustomView(v);
Run Code Online (Sandbox Code Playgroud)
如何使自定义布局占用所有可用宽度actionBar?
请帮忙.
我有一个活动,有2个片段.两者都是ListFragments,并且都将MenuItems贡献给菜单.我有一个MenuItem我设置了属性android:showAsAction让它显示为ActionBar上的一个按钮.哪个工作正常.
现在MenuItem依赖于状态.它是暂停/恢复菜单选项,用于暂停和恢复队列.我的问题是,当创建片段时,我无法弄清楚如何设置它的初始雕像.
它的状态取决于队列是否暂停.所以我有一个AsyncTask来获取队列并根据队列的状态设置一个布尔值(暂停).我正在调用PrepareOptionsMenu来根据队列的最后已知状态设置Pause菜单项的文本,如果我将MenuItem保留在实际菜单中,这将很有用.您点击菜单图标并触发onPrepareOptionsMenu,菜单会在显示之前更新.
问题是,如果我在ActionBar(showAsAction)上放置相同的MenuItem,如何强制它更新而不必调用onPrepareOptionsMenu?我需要能够这样做,因为在第一次启动应用程序时,我发送了一个获取队列的请求,但是在设置并显示ActionBar后,任务返回.我在我的片段中创建了一个处理程序,每次我获得队列更新时都会调用它,但是从那里,如何在ActionBar上更新我的MenuItem的文本?我似乎无法找到一种方法来获取当前设置的Menu来操作它,除了onPrepareOptionMenu.
罗布
我正在尝试使用以下代码将文本居中ActionBar,但它将自己对齐到左侧.
你如何让它出现在中心?
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
Run Code Online (Sandbox Code Playgroud)