Mic*_*l A 22 android android-custom-view
我创建了一个自定义视图:
public class SomeView extends View
Run Code Online (Sandbox Code Playgroud)
自定义视图构造函数:
public SomeView (Context context)
{
super(context);
}
// Called when view is inflated from xml
public SomeView (Context context, AttributeSet attrs)
{
super(context, attrs);
}
// Perform inflation from XML and apply a class-specific base style from a theme attribute.
public SomeView (Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了api 21中的第4个构造函数而没有运气:
public VeediView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
{
super(context, attrs,defStyleAttr, defStyleRes);
}
Run Code Online (Sandbox Code Playgroud)
在xml布局中,我定义了这个视图,并且工作正常.
在Galaxy S2上进行测试工作正常并调用视图构造函数,但是当在Nexus-7 android 5.0.2上运行应用程序时,构造函数根本不会被调用.
知道为什么吗?
它可能与root设备有关吗?
相关的xml视图:
<com.package.name
android:id="@+id/scene"
android:onClick="startx"
style="@style/txt_money_style"
android:layout_width="72dp"
android:layout_height="72dp"
android:background="@drawable/wtbtn"
android:layout_gravity="right"
android:gravity="center_vertical|right"
/>
Run Code Online (Sandbox Code Playgroud)
小智 7
我认为你应该使用这个构造函数:
public SomeView (Context context)
{
this(context , null);
}
// Called when view is inflated from xml
public SomeView (Context context, AttributeSet attrs)
{
this(context, attrs , 0);
}
// Perform inflation from XML and apply a class-specific base style from a theme attribute.
public SomeView (Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// Initialize customize constructor here
}
Run Code Online (Sandbox Code Playgroud)
在API 21中,现在是第4个构造函数,可能是您的XML正在调用它.
来自文档:
public View(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes)
在API级别21中添加
从XML执行通胀并从主题属性或样式资源应用特定于类的基本样式.View的这个构造函数允许子类在膨胀时使用它们自己的基本样式.
确定特定属性的最终值时,有四个输入起作用:
- 给定AttributeSet中的任何属性值.
- AttributeSet中指定的样式资源(名为"style").
- defStyleAttr指定的默认样式.
- defStyleRes指定的默认样式.
- 此主题中的基础值.
这些输入中的每一个都按顺序考虑,首先列出的输入优先于以下输入.换句话说,如果在您提供的AttributeSet中,则无论任何样式中指定了什么,按钮的文本将始终为黑色.
参数
context运行视图的上下文,通过它可以访问当前主题,资源等.attrs正在膨胀视图的XML标记的属性.defStyleAttr当前主题中的一个属性,它包含对为视图提供默认值的样式资源的引用.可以为0以查找默认值.defStyleRes为视图提供默认值的样式资源的资源标识符,仅在defStyleAttr为0或在主题中找不到时使用.可以为0以查找默认值.
问题是我得到了这段代码,但自己没有开发它,在尝试了一切之后发现该应用程序有多个布局文件:
大布局、小布局等...
我只在布局文件夹上定义了自定义视图,因此切换到其他屏幕尺寸会调用常规视图。
我想其他人可以从我的错误中吸取教训,我希望 Android Studio 或 Eclipse 可以支持某种 setContentView(R.layout.activity_scene) 和相关的文件调试选项
所以答案是确保所有布局都定义了自定义视图
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |