안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 ^^
오래간만에 질문을 올립니다.
제가 만들고 있는 어플은 대부분 View 에서 Drawable 과 비트맵을 통해서 그래픽을 표현하고 있습니다.
이번에 키보드를 이용해서 직접 글을 입력하고 싶어서 고민하고 있습니다.
Main(){
onCreate(){
setContentView(menu);
}
}
public class Menu extends View{
protected void onDraw(Canvas canvas) {
img.draw();
}
}
이런형식으로 사용하고 있습니다.
헌데.
제가 원하는 것은 TextView 나 EditView를 Menu의 onDraw에서 표현하고 싶습니다.
protected void onDraw(Canvas canvas) {
img.draw();
editview.draw();
}
EditView 도 View를 상속받은 거라서.
editview.draw(); 메소드는 존재하는데.
Drawable의 SetBounds(int, int, int, int) 같이 위치나 크기를 지정하는 방법을 모르겠습니다.
Drawable은 Graphic 이고
EditView는 Widget 이라서; 비교자체가 불가할수도 있다는 생각이 들긴했습니다만.
혹시 방법이 있을까 질문을 드립니다..
오래간만에 질문을 올립니다.
제가 만들고 있는 어플은 대부분 View 에서 Drawable 과 비트맵을 통해서 그래픽을 표현하고 있습니다.
이번에 키보드를 이용해서 직접 글을 입력하고 싶어서 고민하고 있습니다.
Main(){
onCreate(){
setContentView(menu);
}
}
public class Menu extends View{
protected void onDraw(Canvas canvas) {
img.draw();
}
}
이런형식으로 사용하고 있습니다.
헌데.
제가 원하는 것은 TextView 나 EditView를 Menu의 onDraw에서 표현하고 싶습니다.
protected void onDraw(Canvas canvas) {
img.draw();
editview.draw();
}
EditView 도 View를 상속받은 거라서.
editview.draw(); 메소드는 존재하는데.
Drawable의 SetBounds(int, int, int, int) 같이 위치나 크기를 지정하는 방법을 모르겠습니다.
Drawable은 Graphic 이고
EditView는 Widget 이라서; 비교자체가 불가할수도 있다는 생각이 들긴했습니다만.
혹시 방법이 있을까 질문을 드립니다..
2009.06.11 14:24:16
웅하님 View도 Drawable에서 SetBound해주는 것처럼 사전에 정보를 주어야 하는 부분이 있습니다. view.draw()를 실행시키기전에 view.measure()와 view.layout()을 먼저 실행시켜주어야 합니다. 혹은 layout만 실행시켜주어도 될수 있을듯 합니다. 저도 옛날에 해본 것이라 가능하다는 것은 확실합니다만 정확한 순서를 정리해둔것을 잃어버렸네요. 힌트는 드렸으니 웅하님이 한번 테스트해보시고 결과 포스팅해주시면 감사하겠습니다.
2009.06.11 14:50:45
private EditText ev = new EditText(context) ;
ev.measure(290, 40);
ev.layout(10, 10, 300, 50);
ev.draw(canvas);
ev.measure(290, 40);
ev.layout(10, 10, 300, 50);
ev.draw(canvas);
2009.06.11 14:53:20
위 내용 추가시 EditText가 등록이 되었습니다 ^^
헌데 layout.xx.xml로 추가한 EditText는 터치시 포커스가 잡히는데 이거는 안되는군요.
다른 설정을 추가해야하겠죠 ? 혹시 알고 계신다면 알려주시면 감사하겠습니다. 저도 찾는데로 다시 글 올리겠습니다 ^^
감사합니다.
헌데 layout.xx.xml로 추가한 EditText는 터치시 포커스가 잡히는데 이거는 안되는군요.
다른 설정을 추가해야하겠죠 ? 혹시 알고 계신다면 알려주시면 감사하겠습니다. 저도 찾는데로 다시 글 올리겠습니다 ^^
감사합니다.
2009.06.11 17:08:30
좀 이상한것을 발견해서 글을 올립니다.
textview.setText(" 문장:"); 하면 textview 에 글이 나타나는데 연속적으로 입력이 아닌 다른작업 후 다시 재 입력하면 nullpoint 에러가 납니다.
thread Thread-10 exiting due to uncaught exception
Java.lang.NullPointerException
at android.widget.TextView.checkForRelayout(TextView.java)
at android widget TextView setText()
...
at smile.jack Menu$MenuThread.run(Menu.java)
at java.lang.Thread.run(Thread.java)
이런 오류가 나네요.
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
tv.setText("text4");
이런식으로 한다음에 실행하면
text4가 잘 출력되는데
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
Thread(100);
tv.setText("text4");
이런식으로 연속적으로 setText를 하지 않고 후에 setText()호출하면 위와 같은 NullPoint가 나오네요.
정말 이상한건.
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
Thread(100);
tv.setTextColor(Color.RED);
이런식의 text 삽입이 아닌 환경변화는 오류가 나지 않고 잘 됩니다.. ㅠ
혹시 어떤 이유인지 알수 있을까요 ?
----------------------------------------------------
onKey이용해서 키입력시 글을 띄우고 싶어서 방법을 찾고 있는데 알수 없는 이유로 안되네요.
(View 에서 TextView 클래스 생성(draw)하는 방법은 위와같이 오류가 나지만
layout.xx.xml 에서 레이아웃을 통해서 바꾸는 방법은 잘 됩니다.)
textview.setText(" 문장:"); 하면 textview 에 글이 나타나는데 연속적으로 입력이 아닌 다른작업 후 다시 재 입력하면 nullpoint 에러가 납니다.
thread Thread-10 exiting due to uncaught exception
Java.lang.NullPointerException
at android.widget.TextView.checkForRelayout(TextView.java)
at android widget TextView setText()
...
at smile.jack Menu$MenuThread.run(Menu.java)
at java.lang.Thread.run(Thread.java)
이런 오류가 나네요.
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
tv.setText("text4");
이런식으로 한다음에 실행하면
text4가 잘 출력되는데
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
Thread(100);
tv.setText("text4");
이런식으로 연속적으로 setText를 하지 않고 후에 setText()호출하면 위와 같은 NullPoint가 나오네요.
정말 이상한건.
tv.setText("text1");
tv.setText("text2");
tv.setText("text3");
Thread(100);
tv.setTextColor(Color.RED);
이런식의 text 삽입이 아닌 환경변화는 오류가 나지 않고 잘 됩니다.. ㅠ
혹시 어떤 이유인지 알수 있을까요 ?
----------------------------------------------------
onKey이용해서 키입력시 글을 띄우고 싶어서 방법을 찾고 있는데 알수 없는 이유로 안되네요.
(View 에서 TextView 클래스 생성(draw)하는 방법은 위와같이 오류가 나지만
layout.xx.xml 에서 레이아웃을 통해서 바꾸는 방법은 잘 됩니다.)