RuntimeException的:二进制XML文件中的行#17:你必须提供一个layout_height属性WHIE显示的弹出菜单弹出、你必须、提供一个、属性

2023-09-05 03:57:30 作者:萌翻小宇宙

 公共无效showPopup(INT组,INT img_index,JSONArray json_ar,视图V){

        PopupMenu的PM =新的PopupMenu(EditPhotosActivity.this,V);
        。pm.getMenuInflater()膨胀(R.menu.popup_menu,pm.getMenu());
        pm.setOnMenuItemClickListener(新PopupMenu.OnMenuItemClickListener(){

            @覆盖
            公共布尔onMenuItemClick(菜单项项){
                Toast.makeText(getBaseContext(),你点击+ item.getTitle(),Toast.LENGTH_SHORT).show();
                返回false;
            }
        });
        pm.show();
    }
 

showPopup 方法被调用动态创建Imagevew的一个onclick。在执行应用程序是越来越坠毁 pm.show()

这是错误日志。

 致命异常:主要
 java.lang.RuntimeException的:二进制XML文件中的行#17:你必须提供一个layout_height属性。
    在android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
    在android.view.ViewGroup $ LayoutParams.setBaseAttributes(ViewGroup.java:5709)
    在android.view.ViewGroup $ MarginLayoutParams< INIT>(ViewGroup.java:5850)
    在android.widget.FrameLayout $的LayoutParams< INIT>(FrameLayout.java:610)
    在android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:554)
    在android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:56)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:477)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    在android.support.v7.internal.view.menu.MenuPopupHelper $ MenuAdapter.getView(MenuPopupHelper.java:335)
    在android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:190)
    在android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:128)
    在android.support.v7.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:102)
    在android.support.v7.widget.PopupMenu.show(PopupMenu.java:108)
    在com.newagesmb.version3.EditPhotosActivity $ UserAlbum.showPopup(EditPhotosActivity.java:379)
    在com.newagesmb.version3.EditPhotosActivity $ UserAlbum $ 1.onClick(EditPhotosActivity.java:246)
    在android.view.View.performClick(View.java:4212)
    在android.view.View $ PerformClick.run(View.java:17476)
    在android.os.Handler.handleCallback(Handler.java:800)
    在android.os.Handler.dispatchMessage(Handler.java:100)
    在android.os.Looper.loop(Looper.java:194)
    在android.app.ActivityThread.main(ActivityThread.java:5371)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:525)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    在dalvik.system.NativeStart.main(本机方法)
 
Eclipse 中编辑XML文件不能进行提示的解决办法

这是布局

 <的LinearLayout
        机器人:ID =@ + ID / face_outer
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =0dp
        机器人:方向=垂直
        2:机器人layout_weight =>
        < RelativeLayout的
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:背景=@机器人:彩色/ darker_gray>
            <的TextView
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:文本=@字符串/ photo_face
            机器人:以下属性来=10dp
            机器人:layout_alignParentLeft =真
            机器人:layout_centerVertical =真/>
            <的ImageButton
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignParentRight =真
                机器人:SRC =@可绘制/ btn_add_photo
                机器人:文字颜色=@机器人:彩色/白
                机器人:填充=3DP
                机器人:ID =@ + ID / add_face/>
        < / RelativeLayout的>

        < Horizo​​ntalScrollView
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =match_parent
            机器人:ID =@ + ID / face_scroll
            机器人:背景=@机器人:彩色/白
            机器人:填充=2DP>
            <的LinearLayout
                机器人:layout_height =match_parent
                机器人:layout_width =WRAP_CONTENT
                机器人:ID =@ + ID / face_linear
                机器人:方向=横向>
            < / LinearLayout中>


        < / Horizo​​ntalScrollView>

    < / LinearLayout中>
 

/ 这是一张code从那里showPopup方法被称为 /

 的LinearLayout ll_face =(的LinearLayout)findViewById(R.id.face_linear);
            //将code,上面一行是写里面的onCreate方法

            ImageView的imageView1 =新ImageView的(EditPhotosActivity.this);
            imageView1.setPadding(3,3,3,3);
            LinearLayout.LayoutParams的LayoutParams =新LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);

            imageView1.setLayoutParams(的LayoutParams);
            ll_face.addView(imageView1);

            img_loader.DisplayImage(tmp_json_array.getJSONObject(J).getString(thumb_image),imageView1);
            最终诠释组= I;
            最终诠释img_index = j的;
            imageView1.setOnClickListener(新View.OnClickListener(){

                @覆盖
                公共无效的onClick(视图v){

                    showPopup(集团img_index,json_ar,V);

                }
            });
 

解决方案

确认您已经设置正确的主题。 android.support.v7.widget.PopupMenu 期望应用程序 AppCompat 主题,否则当您尝试显示它会抛出异常的PopupMenu

 安卓主题=@风格/ Theme.AppCompat
 

不过, android.widget.PopupMenu 将工作没有这个主题。

        public void showPopup(int group,int img_index,JSONArray json_ar,View v){

        PopupMenu pm=new PopupMenu(EditPhotosActivity.this,v);
        pm.getMenuInflater().inflate(R.menu.popup_menu, pm.getMenu());          
        pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(getBaseContext(),"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();  
                return false;
            }
        });
        pm.show();
    }

The showPopup method is being called by an onclick of dynamically created Imagevew. App is getting crashed while executing pm.show().

This is the Error Log.

FATAL EXCEPTION: main
 java.lang.RuntimeException: Binary XML file line #17: You must supply a layout_height attribute.
    at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
    at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5709)
    at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:5850)
    at android.widget.FrameLayout$LayoutParams.<init>(FrameLayout.java:610)
    at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:554)
    at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:56)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:477)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:335)
    at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:190)
    at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:128)
    at android.support.v7.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:102)
    at android.support.v7.widget.PopupMenu.show(PopupMenu.java:108)
    at com.newagesmb.version3.EditPhotosActivity$UserAlbum.showPopup(EditPhotosActivity.java:379)
    at com.newagesmb.version3.EditPhotosActivity$UserAlbum$1.onClick(EditPhotosActivity.java:246)
    at android.view.View.performClick(View.java:4212)
    at android.view.View$PerformClick.run(View.java:17476)
    at android.os.Handler.handleCallback(Handler.java:800)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5371)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)

And this is the Layout

    <LinearLayout 
        android:id="@+id/face_outer"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:orientation="vertical"
        android:layout_weight=".2">
        <RelativeLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/darker_gray">
            <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/photo_face"
            android:paddingLeft="10dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"/>
            <ImageButton 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:src="@drawable/btn_add_photo"
                android:textColor="@android:color/white"
                android:padding="3dp"
                android:id="@+id/add_face"/>
        </RelativeLayout>

        <HorizontalScrollView 
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:id="@+id/face_scroll"
            android:background="@android:color/white"
            android:padding="2dp">
            <LinearLayout
                android:layout_height="match_parent"
                android:layout_width="wrap_content"
                android:id="@+id/face_linear"
                android:orientation="horizontal" >
            </LinearLayout>


        </HorizontalScrollView>

    </LinearLayout>

/This is the piece of code from where showPopup method is called/

                LinearLayout ll_face=(LinearLayout) findViewById(R.id.face_linear);
            // The above line of code is written inside onCreate method

            ImageView imageView1=new ImageView(EditPhotosActivity.this);                                    
            imageView1.setPadding(3,3, 3,3);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

            imageView1.setLayoutParams(layoutParams);
            ll_face.addView(imageView1);

            img_loader.DisplayImage(tmp_json_array.getJSONObject(j).getString("thumb_image"),imageView1);
            final int group=i;
            final int img_index=j;
            imageView1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    showPopup(group,img_index,json_ar,v);

                }
            });

解决方案

Make sure your have set right theme. android.support.v7.widget.PopupMenu expect the Application to have AppCompat theme, else it will throw exception when you try to show the PopupMenu

 android:theme="@style/Theme.AppCompat"

But, android.widget.PopupMenu will work without this theme.