에서 ID로보기를 찾을 수 없습니다 조각을 만들었지 만 을 사용하려고하면 View.findViewById(R.id.writing_edittext)
을 반환합니다. 안드로이드 내가 내가 XML로 레이아웃에있는 사용자 정의 글고 <code>MomentumEditText</code> (fragment_edit_text.xml)가 조각
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_edit_text, container, true);
MomentumEditText editText = (MomentumEditText) root.findViewById(R.id.writing_edittext);
}
는 또한
onStart()
에서 MomentumEditText을 얻기 위해 노력했다,하지만 여전히 null를 돌려줍니다.
편집 = xml의 사용자 지정 EditText를 일반 EditText로 바꾸려고 시도했지만 findViewById()가 작동합니다! 여기에 MomentumEditText가 있습니다 :
package com.frazerm.momentum;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.widget.EditText;
public class MomentumEditText extends EditText {
boolean moveCursorDisabled = true;
boolean deleteCharsDisabled = true;
private static Paint linePaint;
private static Paint marginPaint;
MomentumEditText thisEditText = this;
Editable currentText;
public MomentumEditText(Context context, AttributeSet attrs) {
super(context);
setCursorVisible(true);
this.setGravity(Gravity.TOP);
TextWatcher inputTextWatcher = new TextWatcher() {
CharSequence textToAdd = "";
boolean charWasDeleted = false;
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (moveCursorDisabled) {
if(count > after) {
textToAdd = s.subSequence(start + after, start + count);
charWasDeleted = true;
}
}
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (moveCursorDisabled) {
if (charWasDeleted == true) {
charWasDeleted = false;
s.append(textToAdd);
}
else {
thisEditText.setSelection(thisEditText.getText().length());
}
}
}
};
this.addTextChangedListener(inputTextWatcher);
}
//disables ability to move the cursor to other parts of the text
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (deleteCharsDisabled) {
final float eventX = event.getX();
if(getSelectionStart() != eventX)
{
super.onTouchEvent(event);
thisEditText.setSelection(thisEditText.getText().length());
return true;
}
return super.onTouchEvent(event);
}
return super.onTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas) {
linePaint = new Paint();
linePaint.setColor(0x77777777);
//linePaint.setStyle(Style.STROKE);
marginPaint = new Paint();
marginPaint.setColor(0x99FF4444);
//marginPaint.setStyle(Style.STROKE);
Rect bounds = new Rect();
int firstLineY = getLineBounds(0, bounds);
int lineHeight = getLineHeight();
int totalLines = Math.max(getLineCount(), getHeight()/lineHeight);
for (int i = 0; i < totalLines; i++) {
int lineY = firstLineY + i * lineHeight + dip(2);
canvas.drawLine(0, lineY, bounds.right, lineY, linePaint);
}
canvas.drawLine((float) dip(64), (float) 0, (float) dip(64), getHeight(), marginPaint);
super.onDraw(canvas);
setPadding(dip(64), 0, 0, 0);
}
public void setCursorMoveAllowed(boolean allowed) {
moveCursorDisabled = !allowed;
setCursorVisible(allowed);
return;
}
public void setBackspaceAllowed(boolean allowed) {
deleteCharsDisabled = !allowed;
return;
}
public boolean superTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
public int dip (int dip) {
float d = this.getResources().getDisplayMetrics().density;
int pixels = (int)(dip * d);
return pixels;
}
}
= 안드로이드 "http://schemas.android.com/apk/res/android"'루트 요소에, btw. –
그래, 어딘가 사용자 정의보기에 퍼팅하면이 문제를 해결할 수 있다고 제안되었지만 – Frazerm63
@ Frazerm63 아마도 'MomentumEditText'에 대한 코드를 표시합니다. 텍스트를 편집 하시겠습니까? – Blundell