我需要在ActionBar上做两件事:
结果如下:
为了达到第一个目的,我跟随答案here,但它没有将图像放在右侧,它接近标题。这是从该帖子中提取的代码:
ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(actionBar.getDisplayOptions()
| ActionBar.DISPLAY_SHOW_CUSTOM);
ImageView imageView = new ImageView(actionBar.getThemedContext());
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setImageResource(R.drawable.ic_launcher);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT
| Gravity.CENTER_VERTICAL);
layoutParams.rightMargin = 40;
imageView.setLayoutParams(layoutParams);
actionBar.setCustomView(imageView);
这是我的包含布局的imageview:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/ablogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
然后,为了得到第二件事,这就是隐藏默认标题图标,我只是使用它:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(false);
这样做,我隐藏了图标,但是Tabs位于ActionBar上方,即actionBar位于Tabs下方。
答案 0 :(得分:0)
对于第一个解决方法,我创建了一个布局以设置为自定义actionBar。布局与上面的布局相同,但在MainActivity中定义它的方式会改变:
/*Inflate your custom actionBar layout*/
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.actionbar_logo, null);
/*Ads tabs*/
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/*Set up your ActionBar*/
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(actionBarLayout);
这样我就可以在右侧设置图标。但仍需要解决标题问题。
对于第二种解决方法,我不会隐藏/禁用图标,我展示它,但后来我将它设置为隐形。这样,标签完全位于actionBar下。
actionBar.setDisplayShowHomeEnabled(true);
View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);