Android:获取在 android.support 中创建的任何视图的 ID 时出错。v7.widget.Toolbar

Android : Error in getting id of any view created inside android.support.v7.widget.Toolbar

我无法获取工具栏内的 Framelayout 或 Textview 的 ID。请看一看:

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorAppBg"
            app:popupTheme="@style/AppTheme.PopupOverlay" >
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/logo"/>

                <FrameLayout
                    android:id="@+id/fl_message_bg"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:visibility="gone"
                    android:layout_gravity="right|center">
                    <ImageView
                        android:id="@+id/iv_cart"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="bottom"
                        android:layout_marginRight="12dp"
                        android:layout_marginTop="2dp"
                        android:src="@drawable/envelope"/>
                    <TextView
                        android:id="@+id/tv_message_count"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="top|right"
                        android:text="10"
                        android:textColor="@color/colorWhite"
                        android:gravity="center"
                        android:textSize="12sp"
                        android:visibility="visible"
                        android:background="@drawable/circle_notification"/>
                </FrameLayout>            
            </FrameLayout>
        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>

这是我在片段或扩展 AppCompatActivity 的 Activity 中查找那些视图 ID 的代码。 内部片段:

`private Activity activity;
@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.activity =(Activity)context;
    }
flMessageCountBg = (FrameLayout) activity.findViewById(R.id.fl_message_bg);` 

在 Activity 中:

FrameLayout flMessageCountBg = (FrameLayout) findViewById(R.id.fl_message_bg);

我在这两个方面都得到了空 case.Please 帮我解决这个问题。提前致谢。

试试这个方法

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
FrameLayout flMessageCountBg = (FrameLayout) toolbar.findViewById(R.id.fl_message_bg);

您正在使用支持库,因此您应该将工具栏设置为支持操作栏。然后,您可以使用 toolbar.findviewbyid(id)

获取工具栏内的视图
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ImageView iv = (ImageView) toolbar.findViewById(R.id.iv_cart);

如果您正在使用片段并且您的 activity 扩展了 A​​ppCompatActivity,那么您可以按如下方式设置支持操作栏:

((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

activity中的片段获取工具栏然后你从 工具栏 获取 framelayout,如下所示:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
FrameLayout flMessageCountBg = (FrameLayout) toolbar.findViewById(R.id.fl_message_bg);

解决方案非常简单,获取在 android.support.v7.widget.Toolbar 中创建的视图的 ID(内部片段)。 flMessageCountBg = (FrameLayout) getActivity().findViewById(R.id.fl_message_bg);

我创建了三个布局文件夹 layout、layout-large-port 和 layout-xlarge-port,我在测试 7 英寸平板电脑时错过了更改 ID从 layout-large-port.

中选择 ID

@Malek,@Context and @bhargav

感谢您的帮助。