2011-10-04 4 views
7

그래서 Android에서 맞춤 컨트롤을 사용하는 방법에 대해 파악하려고합니다. 하지만 내 애플 리케이션 활동을 만들려고 충돌합니다. 여기 코드는 다음과 같습니다Android에서 EditText 확장하기. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

package com.myApp; 
import android.content.Context; 
import android.widget.EditText; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class MyEditText extends EditText implements OnClickListener { 

    public MyEditText(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 
    public void FlashBorder() 
    { 
     //do some custom action 
    } 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     EditText txt = (EditText) v; 
     txt.selectAll(); 
    } 
} 

다음은 레이아웃 XML입니다 :

<com.myApp.MyEditText 
    android:id="@+id/edtTaskName" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"/> 
+0

체크 URL을 :: http://stackoverflow.com/questions/2026873/android-way-to-appear-bordered-text-on-the-textview –

답변

9

의 이러한 생성자를 구현해야합니다 :

public class TestEditText extends EditText { 
    public TestEditText(Context context) { 
     super(context); 
    } 

    public TestEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public TestEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public TestEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 

것은 예를 들어, 다음을 수행하십시오 :

public TestEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    Log.i("attribute name at index 0", attrs.getAttributeName(0)); 
} 

당신이 얻을 것이다 당신의 logcat에서 다음과 같습니다 :

attribute name at index 0 = id 

이러한 XML 특성을 Super 클래스 (EditText)에 전달하려면 이러한 생성자를 재정의해야합니다.

희망이 도움이됩니다.

+2

감사합니다! 나는 적어도 컴파일러 나 런타임으로부터의 에러에 대한 표시를 얻을 수 있었으면 좋겠다. 그러나 이클립스는 어떤 내부 정보 메서드 호출 도중에 어떤 예외 정보도없이 에러없이 아무것도 멈추지 않았다. – taralex

+0

xml 속성이 attributeSet attrs에 있으므로 구현할 필요가 있습니다. –

+0

'Error inflating class CustomEditText' ... 나를 위해 작동하지 않습니다 ... -/ –

1

당신은 어떤 사용자 정의보기를 만드는이 생성자를 추가해야합니다.

public MyEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
..... 
} 

대신

public MyEditText(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 
0
import android.annotation.TargetApi; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Typeface; 
import android.os.Build; 
import android.util.AttributeSet; 




/** 
* Created by rohann on 14/07/2016. 
*/ 
public class LightEditText extends android.widget.EditText{ 

    public LightEditText(Context context) { 
     super(context); 
     setFont(); 

    } 

    public LightEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setFont(); 
    } 

    public LightEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     setFont(); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public LightEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     setFont(); 
    } 

    /** 
    * This method is used to set the given font to the TextView. 
    */ 
    private void setFont() { 
     Typeface typeface = TypefaceCache.get(getContext().getAssets(), "fonts/Roboto-Light.ttf"); 
     setTypeface(typeface); 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
    } 
} 
관련 문제