안드로이드 개발 질문/답변
(글 수 45,052)
public class LiveViewActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Button btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
Toast.makeText(LiveViewActivity.this, "test", Toast.LENGTH_SHORT).show();
}
});첨부된 그림처럼 레이아웃을 겹쳐서 위에 있는 레이아웃에 각종 컨트롤을 위한
버튼을 위치시켜 사용하고자 합니다.
문제는 위에 있는 레이아웃의 버튼 위젯에 접근을 할 수가 없다는 것 입니다.
위와 같이 Activity 클래스의 onCreate 메서드에 넣어서 사용해봤지만 에러가 발생하면서
실행되지 않습니다.
도움 부탁 드립니다~
2011.07.19 17:33:53
해당 class의 내용입니다.
위에 겹쳐진 레이아웃을 onCreate에서 바로 전개한 것은 아니고 별도의 OverlayView란 클래스를 만들어서 전개했는데
혹시 이것 때문에 안되는게 아닐가 생각됩니다.
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.*;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
import android.widget.LinearLayout.LayoutParams;
public class LiveViewActivity extends Activity
{
boolean OVERLAY = false;
private OverlayView ov;
private Window win;
LayoutInflater inflater;
LinearLayout linear;
LinearLayout.LayoutParams paramlinear;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 라이브뷰 전용 셋팅
// 화면방향은 가로고정
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 타이틀바 표시하지 않음
requestWindowFeature(Window.FEATURE_NO_TITLE);
win = getWindow();
ov = new OverlayView(this);
win.setContentView(ov);
inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
linear = (LinearLayout)inflater.inflate(R.layout.liveviewoverlay, null);
paramlinear = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
Button btn2 = (Button)findViewById(R.id.btn2);btn2.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){Toast.makeText(LiveViewActivity.this, "test", Toast.LENGTH_SHORT).show(); }});}
protected class OverlayView extends View{
public OverlayView(Context context){
super(context);
}
public void onDraw(Canvas canvas){
canvas.drawColor(Color.LTGRAY);
Paint pnt = new Paint();
Bitmap bit = BitmapFactory.decodeResource(getResources(), R.drawable.ramborghini);
canvas.drawBitmap(bit, 10, 10, null);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
if(OVERLAY == false)
{
win.addContentView(linear, paramlinear);
OVERLAY = true;
return true;
}
else{
win.setContentView(ov);
OVERLAY = false;
}
}
return false;
}
}
}




위 Layer에 있는게 안된다니 이상하네요. XML내에 버튼이 android:clickable="false"로 걸려 있다든지 하는 건 아니겠지요? 에러나 XML Layout을 올려주시면 상황파악에 도움이 될 것 같네요.