我创建了一个attrs.xml,我尝试使用[Register(“ First_android.RotatedTextView”)]给我noclassdeffounderror。我试图重建,干净的解决方案,删除这两个obj,bin什么也没有。 有没有人可以公开获得与此类似的自定义控件示例?
[Register("First_android.RotatedTextView")]
public class RotatedTextView : TextView
{
public RotatedTextView(Android.Content.Context context) : base(context, null, 0)
{
}
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{
}
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs, int defStyle, int defStyle2) : base(context, attrs, defStyle, defStyle2)
{
}
}
我的attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="First_android.RotatedTextView">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
Main.axml:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:my="http://schemas.android.com/apk/res-auto"
xmlns:alias="http://schemas.android.com/apk/res/First_android"
android:orientation="vertical"
android:rowCount="4"
android:columnCount="2"
android:layout_width="match_parent"
android:layout_height="match_parent">
<First_android.RotatedTextView
android:text="Placeholder 101" />
答案 0 :(得分:1)
诀窍是,您必须使用名称空间的小写字母。仅保留班级名称字母大小写。
解决方案:
Register
属性<my.coolnamespace.RotatedTextView...></my.coolnamespace.RotatedTextView>
示例
namespace My.CoolNamespace
{
public class RotatedTextView : TextView
{
public RotatedTextView(Android.Content.Context context) : base(context, null, 0)
{ }
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs) : base(context, attrs)
{ }
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{ }
public RotatedTextView(Android.Content.Context context, IAttributeSet attrs, int defStyle, int defStyle2) : base(context, attrs, defStyle, defStyle2)
{ }
}
}
<my.coolnamespace.RotatedTextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
答案 1 :(得分:1)
仅定义attrs.xml
是不够的,还需要解析RotatedTextView
中的自定义属性。
您可以这样做:
attrs.xml :
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<declare-styleable name="RotatedTextView">
<attr name="customText" format="string"/>
</declare-styleable>
</resources>
Main.axml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
<AndroidJunior.RotatedTextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:customText="Test Message"
/>
</RelativeLayout>
RotatedTextView.cs :
namespace AndroidJunior
{
public class RotatedTextView : View
{
//private int mColor = Color.Red;
private String mText = "I am a Custom TextView sdsdasdasdsa";
private Paint mPaint = new Paint(PaintFlags.AntiAlias);
public RotatedTextView(Context context) : base(context)
{
}
public RotatedTextView(Context context, IAttributeSet attrs) : base(context, attrs,0)
{
TypedArray typedArray = context.ObtainStyledAttributes(attrs, Resource.Styleable.RotatedTextView);
//mColor = typedArray.GetColor(Resource.Styleable.RotatedTextView_customColor, Color.Red);
if (typedArray.GetText(Resource.Styleable.RotatedTextView_customText) != null)
{
mText = typedArray.GetText(Resource.Styleable.RotatedTextView_customText).ToString();
}
typedArray.Recycle();
}
public RotatedTextView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
}
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
canvas.DrawText(mText, 100, 100, mPaint);
}
}
}
添加图像以显示项目的结构。