当填充自定义布局时,选项卡出现在操作栏上方

16

我尝试了所有在Stackoverflow其他答案中提到的方法,但仍然无法解决问题。以下是我的代码。

actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ffffff")));
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.actionbar_layout);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setLogo(null);
actionBar.setDisplayShowTitleEnabled(false);
View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);

你的意思是想为操作栏使用自定义布局吗? - Ye Lin Aung
你肯定也试过这个(https://dev59.com/Jmcs5IYBdhLWcg3wYzL6#12884297),对吧? - Ye Lin Aung
是的,我只使用相对布局。 - Mihir
4个回答

38
当您隐藏“主页”项时,选项卡将显示在顶部。这有点违反直觉,但也具有某种设计意义。它们本质上是在推动您使用选项卡作为各个部分的标题,并在其下方使用操作栏进行各个部分内的操作。
您需要使用 setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME) 来再次显示选项卡。它可能还需要一个非null标志(您可以在-nodpi中制作1像素透明标志以使其消失)。

3
我尝试了很多解决方案,这是第一个有效的! - abc32112
3
我有一个问题,就是我无法隐藏应用程序图标,该图标显示在我的自定义操作栏视图旁边。 - mnagy
<item name="android:icon">@android:color/transparent</item> <item name="icon">@android:color/transparent</item> 你也可以使用透明色作为图标: - martyglaubitz
@Delyan 在你上面提到的操作之后,动作栏左侧会有一个透明的空白区域。我使用了 XML 自定义图标,这会在左侧创建额外的空间,而我并不想要这个空间。你有什么办法可以完全移除那个空间吗? - Abid Khan
顺便提一下,这个问题已经有一个错误报告了。 - Vadim Kotov

4
使用已接受的解决方案会在“操作栏”上留下左填充,这会缩小您的自定义视图。
解决方案是在“Activity”的“onCreate”中添加以下代码:
        View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : R.id.abs__home);
        ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0));
        ((View) homeIcon).setVisibility(View.GONE);

2
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME); 
        getActionBar().setDisplayUseLogoEnabled(true);
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setCustomView(R.layout.actionbar_layout);

这对我很有帮助。

我宁愿在样式中使用android:displayOptions。 - martyglaubitz

1
请尝试使用LayoutInflater来填充视图,然后将视图设置到操作栏中。
    LayoutInflater inflator = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflator.inflate(R.layout.layout, null);
    actionBar.setCustomView(v);

并从this

使用RelativeLayout代替LinearLayout作为主容器。重要的是将android:layout_gravity="fill_horizontal"设置为它。就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接