问题描述
所以,我刚刚将我的代码库更新为 Lollipop,但我在操作栏上遇到了问题.我正在使用 AppCompat 和 ActionBarActivity,并扩展自定义视图.好像自定义view不再占整个屏幕宽度了,左边留了一条细条
So, I just updated my codebase to Lollipop, and I'm having issues with the Action Bar. I'm using AppCompat and ActionBarActivity, and inflating a custom view. It seems that the custom view no longer takes up the whole width of the screen, leaving a thin strip on the left
以前的样子
现在的样子
这是我用来设置操作栏的代码.有人有什么想法吗?
This is the code I'm using to set up the Action Bar. Anyone have any ideas?
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();
}
});
}
编辑
取出自定义视图并更改背景现在占据了整个宽度.那么问题来了,如何让一个CustomView占据ActionBar的整个宽度?
Taking out the custom view and changing the background now takes up the whole width. So the issue is, how can we make a CustomView take up the whole width of the ActionBar?
推荐答案
看起来这是由于最近 appcompat-v7
更新中对 ActionBar
的最新更改造成的.处理操作栏的方式似乎发生了重大变化.
Looks like this is caused by the latest changes to the ActionBar
in the recent appcompat-v7
update.It seems like that there are significant changes to how you should handle action bars.
我遇到了同样的问题,在阅读了 ActionBar
之后文档,尤其是以下引述我找到了解决方案.
I faced the same issue and after reading the ActionBar
documentation, and especially the following quote I found a solution.
从 Android L(API 级别 21)开始,操作栏可以由应用程序布局中的任何工具栏小部件表示.应用程序可以向 Activity 发出信号,哪个 Toolbar 应该被视为 Activity 的操作栏.使用此功能的活动应使用提供的 .NoActionBar 主题之一,将 windowActionBar 属性设置为 false 或不请求窗口功能.
在我看来,AppCompat
主题发生了变化,一方面似乎破坏了一些东西,但另一方面提供了更多的灵活性.我建议执行以下步骤:
The way I see it, the AppCompat
themes were changed and on one hand seemed to break a few things but provide much more flexibility on the other.I recommend following these steps:
- 在您的活动中使用
.NoActionBar
样式,如上述引用所述 - 将
android.support.v7.widget.Toolbar
添加到您的活动布局 - 设置
app:contentInsetStart="0dp"
属性.这是您在问题中描述的边距的主要问题
- Use
.NoActionBar
style in your activity as described in the above quote - Add a
android.support.v7.widget.Toolbar
to your Activity layout - Set the
app:contentInsetStart="0dp"
attribute. This is the main issue with the margin that you describe in your question
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/actionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp" >
</android.support.v7.widget.Toolbar>
通常建议您在单独的布局文件中执行此操作,并在您的活动布局中使用 include
,这样如果在多个活动中使用,您只需在一个地方自定义工具栏
It's usually recommended that you do that in a separate layout file and use include
in your activity layout so you will only need to customize the Toolbar in one place if used in multiple activities
<include layout="@layout/view_action_bar" />
- 在您的 Activity
onCreate
中使用findViewById
和setSupportActionBar
来向 Activity 发出信号,哪个 Toolbar 应该被视为 Activity 的操作栏
- Use
findViewById
andsetSupportActionBar
in your ActivityonCreate
tosignal to the Activity which Toolbar should be treated as the Activity's action bar
Toolbar actionBar = (Toolbar) findViewById(R.id.actionBar);
setSupportActionBar(actionBar);
- 执行此操作后,
onCreateOptionsMenu
中添加的所有操作都将添加到工具栏,并将被视为活动操作栏. - 根据需要进一步自定义工具栏(添加子视图等)
- Once you do that, all actions added in
onCreateOptionsMenu
will be added to the toolbar and it will be treated as the activity action bar. - Further customize the Toolbar as desired (Add child views etc.)
这篇关于Android Lollipop、AppCompat ActionBar 自定义视图不占用整个屏幕宽度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!