要将右对齐的微调器放在操作栏上,我必须使用具有相对布局的自定义视图。但是在我将自定义视图放在操作栏上后,我发现应用标题消失了,它一定是通过将自定义视图放在操作栏上来影响的。
是否可以在操作栏上同时显示标题和自定义视图?否则我也必须将标题放在客户视图中,但我不想那样做。
要将右对齐的微调器放在操作栏上,我必须使用具有相对布局的自定义视图。但是在我将自定义视图放在操作栏上后,我发现应用标题消失了,它一定是通过将自定义视图放在操作栏上来影响的。
是否可以在操作栏上同时显示标题和自定义视图?否则我也必须将标题放在客户视图中,但我不想那样做。
自定义视图将替换标题栏。我建议您在自定义视图中包含应用程序标题的文本视图,以便您有更多的发挥空间。
实际上它并没有“取代”。这可以通过层次结构查看器显示。只是如果您将自定义视图设置得太大,它将位于标题的顶部。但是,如果您只放置微调器之类的东西,则可以将其设置为右对齐并显示标题。
这是我用来在右侧放置图像视图的 XML:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="68dp"
android:layout_height="31dp"
android:padding="4dp"
android:layout_gravity="center_vertical|right"
android:layout_marginRight="4dp"
android:onClick="onImageClicked"
android:background="@drawable/mypic_bg"
android:src="@drawable/logo_mypic" />
在代码中:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM
| ActionBar.DISPLAY_HOME_AS_UP
| ActionBar.DISPLAY_SHOW_HOME
| ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setCustomView(R.layout.my_title_bar);
如果您的“操作栏”只是一个简单的视图,我的解决方案是将一些代码放入 BaseActivity,看起来像:
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(layoutResID);
titleBar = (TitleBar) findViewById(R.id.title_view);
if (titleBar != null) {
titleBar.setTitle(getTitle());
}
}
当您设置活动标签和调用setContentView
方法时,自定义视图会将标签显示为标题。
PS:
我的TitleBar.java
代码:
public class TitleBar extends FrameLayout {
TextView back, title, action;
public TitleBar(Context context) {
super(context);
init(context);
}
public TitleBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public TitleBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
setId(R.id.title_view);
View layout = View.inflate(context, R.layout.title_bar, null);
back = (TextView) layout.findViewById(R.id.back);
title = (TextView) layout.findViewById(R.id.title);
action = (TextView) layout.findViewById(R.id.action);
addView(layout);
ViewGroup.LayoutParams params = layout.getLayoutParams();
setLayoutParams(params);
}
public void setTitle(CharSequence content) {
title.setText(content);
}
public void setTitleClickListener(View.OnClickListener listener) {
title.setOnClickListener(listener);
}
public void setBackClickListener(View.OnClickListener listener) {
back.setOnClickListener(listener);
}
public void setActionClickListener(View.OnClickListener listener) {
action.setOnClickListener(listener);
}
public void setActionVisiable(boolean visiable) {
action.setVisibility(visiable ? VISIBLE : INVISIBLE);
}
public void setBackVisiable(boolean visiable) {
back.setVisibility(visiable ? VISIBLE : INVISIBLE);
}
}