我的问题涉及使用完全自定义的ActionBar视图(因为它是我的客户希望ActionBar如何工作所必需的)。我删除了徽标,标题和其他所有可能的内容。但是,ActionBar的自定义视图不会一直延伸到整个屏幕。
我已经尝试了以下内容(作为快速概述):
以下是我的问题的屏幕截图: Situation Screnshot http://imagizer.imageshack.us/a/img540/1289/efkvj9.png
以下是样式:(作为旁注,我最初保留了原生ActionBar,但删除了大部分内容)
<!-- Customized App Theme -->
<style name="AppTheme2" parent="Theme.AppCompat.Light">
<!-- Let the actioBbar overlay the activity, ie activity is full screen -->
<item name="android:windowActionBarOverlay">true</item>
<!-- Set up the action bar styles -->
<item name="android:actionBarStyle">@style/ActionBarEmpty</item>
<!-- Remove the shadow under the actionBar -->
<item name="android:windowContentOverlay">@null</item>
<!-- Set the drawer icon to show up instead of the "Up" caret icon
<item name="android:homeAsUpIndicator">@drawable/ic_drawer</item>
<item name="homeAsUpIndicator">@drawable/ic_drawer</item>
-->
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/ActionBarEmpty</item>
</style>
<!-- Final, empty Action Bar style | makes space for customized actionBar -->
<style name="ActionBarEmpty" parent="Widget.AppCompat.Base.ActionBar">
<!-- TODO: Add support versions -->
<item name="android:displayOptions">none</item>
<item name="android:background">@color/transparent</item>
<!-- Tested the below, does absolute nothing -->
<item name="android:layout_margin">0dp</item>
<item name="android:padding">0dp</item>
<item name="android:minWidth">0dp</item>
</style>
以下是我的Activity中有关设置ActionBar的代码:
// Initialize and set up the ActionBar
mActionBar = getActionBar();
mActionBar.setDisplayHomeAsUpEnabled(false);
mActionBar.setDisplayShowHomeEnabled(false);
mActionBar.setDisplayShowTitleEnabled(false);
mActionBar.setDisplayShowCustomEnabled(true);
// Set the actionBar layout initially to the simple one
mActionBar.setCustomView(mViewActionBarSimple);
以下是ActionBar屏幕截图中显示的视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
android:background="@color/white">
<ImageButton
android:id="@+id/navButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/padding_actionbar_icon"
android:paddingBottom="@dimen/padding_actionbar_icon"
android:paddingRight="@dimen/padding_actionbar_icon"
android:paddingEnd="@dimen/padding_actionbar_icon"
android:layout_marginLeft="@dimen/margin_actionbar_icon_left"
android:layout_marginStart="@dimen/margin_actionbar_icon_left"
android:src="@drawable/ic_drawer_normal"
android:background="?android:attr/selectableItemBackground"
/>
<TextView
android:id="@+id/textTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_general"
android:layout_gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/text_normal"
android:text="@string/garbage_fill_short"
/>
</LinearLayout>
除了尝试删除我能想到的所有内容外,我还尝试删除选项菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// To remove the options menu - and make the custom actionBar take the full space -
// always return false
return false;
}
我在带有Android KitKat的三星Galaxy S4上运行它。
感谢您阅读本文。在这一点上,任何帮助都将受到赞赏。
更新:对于阅读此内容的任何人,我都不知道为什么会这样,但我按照以下答案后才发现问题。我用一个RelativeLayout [以及LinearLayout及其内容作为子项]包围了actionBar布局,并且宽度/背景自行修复了...答案仍然很棒,因为它非常清晰,绝对删除了actionBar,而在此之前仍以某种方式使用它。
答案 0 :(得分:1)
请尝试通过创建基本活动来尝试删除操作栏内容,以便您可以参考所有应用和内容。从布局中扩充自定义操作栏
@SuppressLint("InlinedApi")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setHomeButtonEnabled(false);
actionBar.setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
View homeIcon = findViewById(android.R.id.home);
// Hides the View (and so the icon)
if (homeIcon != null)
((View) homeIcon.getParent()).setVisibility(View.GONE);
overridePendingTransition(0, 0);
}
添加自定义视图
@SuppressLint("InlinedApi")
@Override
public void setContentView(int layoutResID)
{
super.setContentView(R.layout.activity_base);
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.container);
viewGroup.removeAllViews();
viewGroup.addView(getLayoutInflater().inflate(layoutResID, null));
// you can find action_bar layouts view & add listner
}
并在activity_base.xml中自定义包含自定义操作栏的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:orientation="vertical" >
<include layout="@layout/action_bar" />
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" />
</LinearLayout>
您想要使用的地方,然后扩展此活动。