Je suis très nouveau pour le développement Android et je suis confronté à un petit problème ici. Je souhaite créer une classe TextView personnalisée en étendant TextView et utiliser cette classe dans ListView (chaque ligne de ListView contient l'objet de cette classe).Obtenir gonfler l'exception dans Android
J'ai créé ma classe personnalisée comme celui-ci
public class CustomTextView extends TextView{
Context context;
Paint mPaint;
String text;
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomTextView(Context context) {
super(context);
init();
}
private void init(){
setPadding(3, 3, 3, 3);
mPaint.setTextSize(16);
mPaint.setColor(Color.GREEN);
mPaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
}
@Override
public void setText(CharSequence text, BufferType type) {
this.text = (String) text;
super.setText(text, type);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect rect = new Rect();
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(3);
getLocalVisibleRect(rect);
canvas.drawRect(rect, paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int reqWidth;
int reqHeight;
// width & height mode
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
// specified width & height
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
// find out Width based on widthMode
if(widthMode == MeasureSpec.EXACTLY)
// set user specified Width
reqWidth = widthSize;
else
// find out the total pixel size required for first and last text
reqWidth = (int)(mPaint.measureText(text)) ;
// find out Height based on heightMode
if(heightMode == MeasureSpec.EXACTLY)
// set user specified Height
reqHeight = heightSize;
else
// get the default height of the Font
reqHeight = (int) mPaint.getTextSize();
// set the calculated width and height of your drawing area
setMeasuredDimension(reqWidth, reqHeight);
}
}
et pour chaque ligne ofmy ListView J'ai créé une structure xml composée d'un TextView, Ma classe personnalisée, et une image
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_width="wrap_content"
android:paddingBottom="5px"
android:paddingTop="5px"
android:paddingLeft="5px">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:gravity="center"
android:background="@drawable/bg"
android:textColor="#FFFF00"
android:text="hi"/>
<!--<TextView android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10px"
android:text="hi"/>
-->
<com.example.CustomTextView
android:id="@+id/TextView02"
android:layout_width="fill_parent"
android:layout_height="50px"
/>
<ImageView android:id = "@+id/image"
android:src="@drawable/icon"
android:layout_width = "50dip"
android:layout_height = "50dip"
/>
</AbsoluteLayout>
Dans la classe Adapter de ma ListView je récupère la structure comme ceci
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflator.inflate(R.layout.listview, null);
convertView.setMinimumHeight(80);
holder = new ViewHolder();
holder.text = (TextView) convertView
.findViewById(R.id.TextView01);
holder.text2 = (CustomTextView) convertView
.findViewById(R.id.TextView02);
}
Mais je me fais exception ployer sur
convertView = mInflator.inflate(R.layout.listview, null);
Cependant, si au lieu de mon point de vue personnalisé, ajouter d'un simple textView dans layout.xml (structure de mise en page de chaque rangée de listview) alors tout fonctionne bien
I J'ai cherché des forums mais je ne comprends pas ce que je fais mal.
S'il vous plaît aidez-moi dans ce cas.
pourriez-vous montrer le message d'erreur complet s'il vous plaît? – WarrenFaith