GVKun编程网logo

ERROR: In MenuView, unable to

23

如果您想了解ERROR:InMenuView,unableto的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析android–如何在declare-styleable中定义整数数组?、Andr

如果您想了解ERROR: In MenuView, unable to的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析android – 如何在declare-styleable中定义整数数组?、Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用、Android中自定义控件的declare-styleable属性重用方案、Android库项目“滑动菜单”引发java.lang.NoClassDefFoundError:com.slidingmenu.lib.R $styleable的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

ERROR: In <declare-styleable> MenuView, unable to

ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing


   eclipse  sdk从低版本切换到高版本sdk的时候   v7包会包这个错ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing

   问题解决:

     点击V7包找到values文件夹   打开attrs.xml      ctrl+f   查找 MenuView     将preserveIconSpacing注释掉或者删掉    clean项目

ok 完成。


android – 如何在declare-styleable中定义整数数组?

android – 如何在declare-styleable中定义整数数组?

我正在实现我自己的< declare-styleable>用于自定义视图(按照说明 here).我希望能够将整数数组指定为可能的XML属性之一.我如何:

>在attrs.xml中将整数数组指定为XML属性?
在我的自定义视图中调用getsstyledAttributes()后,从TypedArray获取它?

解决方法

>您可以将其声明为参考.
<declare-styleable name="MyView">
    <attr name="array" format="reference"/>
</declare-styleable>

>它看起来像TypeArray没有getIntArray方法,所以你必须从资源直接获取它.

final TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.MyView);
final int id = array.getResourceId(R.styleable.MyView_array,0);

if (id != 0) {
    final int[] values = getResources().getIntArray(id);
}

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三) 查看第三课,这样跟容易方便你的理解!

xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,比如:test:attrs="" 呢?答案是肯定的.

 

进入主题。大致以下步骤:

 

一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="MyView">  
  4.         <attr name="textColor" format="color" />  
  5.         <attr name="textSize" format="dimension" />  
  6.     </declare-styleable>  
  7. </resources>  

二、 我们在MyView.java 代码编写如下,其中下面的构造方法是重点,我们获取定义的属性R.sytleable.MyView_textColor, 获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.MyView_textSize, 36 ); ) 防止我们在xml 文件中没有定义.从而使用默认值!

MyView 就是定义在<declare-styleable name="MyView "></declare-styleable> 里的 名字,获取里面属性用 名字_ 属性 连接起来就可以.TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!

 

  1. public MyView(Context context,AttributeSet attrs)  
  2.     {  
  3.         super(context,attrs);  
  4.         mPaint = new Paint();  
  5.           
  6.         TypedArray a = context.obtainStyledAttributes(attrs,  
  7.                 R.styleable.MyView);  
  8.           
  9.         int textColor = a.getColor(R.styleable.MyView_textColor,  
  10.                 0XFFFFFFFF);  
  11.         float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
  12.           
  13.         mPaint.setTextSize(textSize);  
  14.         mPaint.setColor(textColor);  
  15.           
  16.         a.recycle();  
  17.     }  

MyView.java  MyView控件全部代码如下:

 

  1. package com.android.tutor;  
  2. import android.content.Context;  
  3. import android.content.res.TypedArray;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.graphics.Rect;  
  8. import android.graphics.Paint.Style;  
  9. import android.util.AttributeSet;  
  10. import android.view.View;  
  11. public class MyView extends View {  
  12.     private Paint mPaint;  
  13.     private Context mContext;  
  14.     private static final String mString = "Welcome to Mr Wei''s blog";  
  15.       
  16.     public MyView(Context context) {  
  17.         super(context);  
  18.         mPaint = new Paint();  
  19.     }  
  20.     public MyView(Context context,AttributeSet attrs)  
  21.     {  
  22.         super(context,attrs);  
  23.         mPaint = new Paint();  
  24.           
  25.         TypedArray a = context.obtainStyledAttributes(attrs,  
  26.                 R.styleable.MyView);  
  27.           
  28.         int textColor = a.getColor(R.styleable.MyView_textColor,  
  29.                 0XFFFFFFFF);  
  30.         float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
  31.           
  32.         mPaint.setTextSize(textSize);  
  33.         mPaint.setColor(textColor);  
  34.           
  35.         a.recycle();  
  36.     }  
  37.     @Override  
  38.     protected void onDraw(Canvas canvas) {  
  39.         // TODO Auto-generated method stub  
  40.         super.onDraw(canvas);  
  41.         //设置填充  
  42.         mPaint.setStyle(Style.FILL);  
  43.           
  44.         //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标  
  45.         canvas.drawRect(new Rect(1010100100), mPaint);  
  46.           
  47.         mPaint.setColor(Color.BLUE);  
  48.         //绘制文字  
  49.         canvas.drawText(mString, 10110, mPaint);  
  50.     }  
  51. }  

三、将我们自定义的MyView 加入布局main.xml 文件中,并且使用自定义属性,自定义属性必须加上:

    " xmlns:test ="http://schemas.android.com/apk/res/com.android.tutor"  ,test是自定义属性的前缀,           com.android.tutor 是我们包名.

 

main.xml 全部代码如下:

 

  1. <?xml   
  2. version="1.0" encoding="utf-8"?>  
  3. <LinearLayout   
  4. xmlns:android="http://schemas.android.com/apk/res/android"  
  5.                 
  6. xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"  
  7.     android:orientation="vertical"  
  8.     android:layout_width="fill_parent"  
  9.     android:layout_height="fill_parent"  
  10.     >  
  11. <TextView    
  12.     android:layout_width="fill_parent"   
  13.     android:layout_height="wrap_content"   
  14.     android:text="@string/hello"  
  15.     />  
  16. <com.android.tutor.MyView  
  17.     android:layout_width="fill_parent"   
  18.     android:layout_height="fill_parent"   
  19.     test:textSize="20px"  
  20.     test:textColor="#fff"  
  21. />  
  22. </LinearLayout>  

 

四、运行之效果如下图:

Android中自定义控件的declare-styleable属性重用方案

Android中自定义控件的declare-styleable属性重用方案

最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法.本文将就declare-stylable中属性重用记录一下.

不完美的代码

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <declare-styleable name="ExTextView">
       <attr name="enableOnPad" format="boolean" />
     <attr name="supportDeviceType" format="reference"/>
    </declare-styleable>

    <declare-styleable name="ExEditText">
       <attr name="enableOnPad" format="boolean" />
     <attr name="supportDeviceType" format="reference"/> 
    </declare-styleable>
</resources>

如上面代码,在ExTextView和ExEditText这个stylable中有着重复的属性申明.虽然上面可以工作,但是总感觉写的不专业,于是寻找优化方法.

这样可以么

尝试着为declare-stylable指定一个parent,如下代码

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <declare-styleable name="ExTextView">
       <attr name="enableOnPad" format="boolean" />
     <attr name="supportDeviceType" format="reference"/>
    </declare-styleable>

    <declare-styleable name="ExEditText" parent="ExTextView">
         
    </declare-styleable>
</resources>


attrs.xml没有报告语法错误.但是当我使用R.styleable.ExEditText_supportDeviceType时候,R文件却没有生成,重新清理了工程还是不生效,不知道是否为adt插件的问题.其他人也遇到了这样的问题. 这个方法目前是不行的.

终极答案

实际上我们可以在declare-stylable之前,申明要多次使用的属性,在declare-stylable节点内部,只需调用即可.具体代码如下.

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <attr name="enableOnPad" format="boolean" />
  <attr name="supportDeviceType" format="reference"/>
 
    <declare-styleable name="ExTextView">
        <attr name="enableOnPad"/>
        <attr name="supportDeviceType"/>
    </declare-styleable>

    <declare-styleable name="ExEditText">
        <attr name="enableOnPad"/>
      <attr name="supportDeviceType"/>
    </declare-styleable>
</resources>


每次引用attr后,建议清理一下工程,确保R文件重新生成.

延伸阅读

http://stackoverflow.com/questions/18827875/how-to-declare-several-stylable-attributes-with-the-same-name-for-different-tags

Android库项目“滑动菜单”引发java.lang.NoClassDefFoundError:com.slidingmenu.lib.R $styleable

Android库项目“滑动菜单”引发java.lang.NoClassDefFoundError:com.slidingmenu.lib.R $styleable

我正在开发一个android应用程序,并且试图使用库滑动菜单(github.com/jfeinstein10/SlidingMenu).但是,我在一个干净的项目中使用库时遇到问题.我懂了

java.lang.NoClassDefFoundError: com.slidingmenu.lib.R$styleable

做的时候

SlidingMenu slidingMenu = new SlidingMenu();

经过测试的配置:
JDK已测试1.6u43、1.7(最新)
项目目标api =尝试过Android 4.2.2和Google Api 17
已测试21、21.0.1、21.1的SDK版本
Windows 8 Pro x64,Intel Core i7 3610QM,Nvidia GT660M,Samsung Pro 840 256GB SSD
与Actionbarsherlock集成,也没有集成.

我通过从现有代码创建一个Android项目,在android属性中标记“ Is Library”,然后在原始应用程序android属性中引用它(而不是通过.jar)来导入该库

下面的链接指向代码片段,完整的堆栈跟踪以及当前配置的屏幕截图

程式码片段:
http://pastebin.com/2yzRC5AJ

完整的堆栈跟踪:
http://pastebin.com/D7RQwuQd

我已经坚持了三天了…:/

解决方法:

在消除noclassdef错误之前,我必须以两种方式添加依赖项

>将/ bin中的library.jar作为依赖项添加到您的构建路径中,请确保选择“订购和导出”选项卡,并同时选中新依赖项的复选框.
>通过右键单击您的项目,然后单击属性,然后是android,然后添加库,添加库
>香草

我也为此感到挣扎,并且通过大量的Google搜索,设法将其组合在一起.

希望能帮助到你..

今天关于ERROR: In MenuView, unable to的讲解已经结束,谢谢您的阅读,如果想了解更多关于android – 如何在declare-styleable中定义整数数组?、Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用、Android中自定义控件的declare-styleable属性重用方案、Android库项目“滑动菜单”引发java.lang.NoClassDefFoundError:com.slidingmenu.lib.R $styleable的相关知识,请在本站搜索。

本文标签:

上一篇Fastjson的SerializerFeature序列化属性(fastjson 序列化)

下一篇mysql timestamp数据类型5.6.5版本分割线(mysql数据分割方式)