从 getSupportActionBar() 获取 ImageView

Get ImageView from getSupportActionBar()

我正在使用 getSupportActionBar().setIcon(R.drawable.ic_transparent); 设置工具栏的图标。如何从该图标中获取 ImageView?我需要图标的Rect

我正在尝试使用 Toolbar 而不是旧的操作栏来实现 this 的一个版本。

编辑:我想出了一个替代解决方案,将 TextView 和 ImageView 放在工具栏中,而不是使用内置徽标和标题。这在 Android 5.0 上运行良好,但文本不会显示在该版本以下的任何内容上。有任何解决此问题或上述问题的建议吗?

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    android:background="@android:color/transparent"
    android:elevation="10dp"
    tools:ignore="UnusedAttribute">

    <ImageView
        android:id="@+id/toolbar_icon"
        android:layout_width="?android:attr/actionBarSize"
        android:layout_height="?android:attr/actionBarSize"
        android:padding="10dp"
        android:scaleType="fitStart"
        android:src="@drawable/ic_transparent" />

    <TextView
        android:id="@+id/toolbar_title"
        style="@style/Base.TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:text="hello" />

</android.support.v7.widget.Toolbar>

不好说。

正确答案:您不应该乱用不是您自己设计的内部小部件(即,如果没有 ImageView 的 getter 方法,您应该将其留在原处).参见 here

有点老套的答案:您可能想试试 this custom method。它根据 ContentDescription 搜索视图。我从未尝试过,但它可以工作。

我看了一下,只是看到了一个私有函数 getActionBarIconView(),其中 return 在 activity NoBoringActionBarActivity 中的图像视图,如果需要使用它,只需将其更改为 public在外部片段中。

我通过将自己的ImageView和TextView添加到工具栏来替换徽标和标题来解决它,然后通过将工具栏移动到布局的末尾来修复android 4.0-4.4上不可见的标题文件。我不确定为什么我必须这样做,但它奏效了。