Android ActionBarSherlock-显示在actionbar上方的选项卡,带有自定义视图
我正在尝试创建一个没有应用程序徽标/文本、具有集中图片的actionbar,我知道可以使用自定义视图,以下是我的代码:Android ActionBarSherlock-显示在actionbar上方的选项卡,带有自定义视图,android,tabs,android-actionbar,actionbarsherlock,Android,Tabs,Android Actionbar,Actionbarsherlock,我正在尝试创建一个没有应用程序徽标/文本、具有集中图片的actionbar,我知道可以使用自定义视图,以下是我的代码: protected void initActionBar() { RelativeLayout custom = new RelativeLayout(getApplicationContext()); ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PA
protected void initActionBar()
{
RelativeLayout custom = new RelativeLayout(getApplicationContext());
ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
custom.setLayoutParams(params);
custom.setGravity(Gravity.CENTER);
custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded));
ImageView image =new ImageView(getApplicationContext());
image.setBackgroundResource(R.drawable.ic_launcher);
custom.addView(image);
ab = getSupportActionBar();
ab.setDisplayShowCustomEnabled(true);
ab.setCustomView(custom);
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
tab_connect = ab.newTab();
tab_connect.setText("CONNECT");
tab_connect.setTabListener(this);
tab_discover = ab.newTab();
tab_discover.setText("DISCOVER");
tab_discover.setTabListener(this);
tab_simplify= ab.newTab();
tab_simplify.setText("SIMPLIFY");
tab_simplify.setTabListener(this);
ab.addTab(tab_simplify);
ab.addTab(tab_discover);
ab.addTab(tab_connect);
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayShowHomeEnabled(false);
}
但是,当我隐藏徽标时,操作栏会在我的选项卡下方移动,如下所示:
但是如果我设置ab.setDisplayShowHomeEnabled(true),操作栏就会出现在正确的位置(但带有我不想要的徽标):
我做错了什么?这里有一个简单的解决方法: 在onCreate方法中使用以下内容:
View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
这将完全折叠“主页”按钮
附言:我使用的是标准的ActionBar,但应该是一样的
或
如果你想在Sherlock Actionbar中提供支持,那么你必须使用这个
actionBar.setLogo(null); // forgot why this one but it helped
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
((View) homeIcon).setVisibility(View.GONE);
actionBar.setDisplayShowTitleEnabled(false);
值得注意的是,所选答案将仅与本机ActionBar一起使用,因为pre hc上不存在元素android.R.id.home。也就是说,在预hc设备上,您将获得NPE 由于您使用的是ActionBarSherlock,我假设您希望支持pre-hc设备,因此您应该根据平台版本使用正确的id。ABS将通过R.id.ABS_uuhome为其ActionBar的实现公开android.R.id.home的等价物 因此,我们可以将建议的解决方法调整为:
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
这也很有效!(阅读bugreport评论;)
我用过这个
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(false);
ab.setHomeButtonEnabled(false);
ab.setLogo(null);
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
((View) homeIcon).setVisibility(View.GONE);
ab.setDisplayShowTitleEnabled(false);
只需从actionBar.setDisplayOptions()方法中删除DISPLAY\u SHOW\u HOME标志。在@furyfred answer之后,当使用
AppCompat
库中的actionBar
时,可以使用此代码:
View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : android.support.v7.appcompat.R.id.home);
if (null != homeIcon && null != homeIcon.getParent())
{
((View) homeIcon.getParent()).setVisibility(View.GONE);
}
上面的所有帖子都会折叠主页图标,但留下空白。为了避免这种情况,您需要将徽标大小设置为零。下面添加了我的代码片段。它可能会帮助解决相同问题的其他人。谢谢
actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
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);
看起来像是一个bug:只是用普通的android actionbar尝试了一下,但还是有同样的问题……不过,这不允许我像我想的那样使用标题作为“向上”按钮。这很好,但在徽标曾经的位置没有留下黑色空间。如何摆脱黑空间?这是最好的答案,其他解决方案会改变actionbar的样式
actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
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);