Android 是否可以同时在操作栏上显示标题和自定义视图?

Android 是否可以同时在操作栏上显示标题和自定义视图?,android,Android,要在动作栏上放置右对齐的微调器,我必须使用具有相对布局的自定义视图。但当我把自定义视图放在动作栏上后,我发现应用程序标题消失了,它一定是受到了把自定义视图放在动作栏上的影响 是否可以在操作栏上同时显示标题和自定义视图?否则,我也必须将标题放在客户视图中,但我不想这样做。自定义视图将替换标题栏。我建议您在自定义视图中为应用程序标题添加一个文本视图,这样您就有了更多的发挥空间。实际上,它不会“替换”。这可以通过层次结构查看器显示。只是,如果您将自定义视图设置得太大,它将位于标题的顶部。但是,如果只放

要在动作栏上放置右对齐的微调器,我必须使用具有相对布局的自定义视图。但当我把自定义视图放在动作栏上后,我发现应用程序标题消失了,它一定是受到了把自定义视图放在动作栏上的影响


是否可以在操作栏上同时显示标题和自定义视图?否则,我也必须将标题放在客户视图中,但我不想这样做。

自定义视图将替换标题栏。我建议您在自定义视图中为应用程序标题添加一个文本视图,这样您就有了更多的发挥空间。

实际上,它不会“替换”。这可以通过层次结构查看器显示。只是,如果您将自定义视图设置得太大,它将位于标题的顶部。但是,如果只放置类似微调器的对象,则可以将其设置为右对齐,并显示标题

下面是我用来在右侧放置图像视图的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" />

如果您的“操作栏”只是一个简单的视图,那么我的解决方案是在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
方法时,自定义视图将标签显示为标题

附言:

我的
标题栏.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);
    }
}

为什么你不可以自定义你的标题,因为我需要修改标题的时候。如果我还将标题放在自定义视图中,我需要添加一个方法来处理标题更改。
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);
    }
}