내가 setContentView (boardView)를 주석 처리 할 때; 내 Game.java에서 BoardView의 내 사용자 정의보기가 잘 작동하고 멋지게 표시됩니다 ... 그러나 onSizeChanged는 BoardView.java에서 호출되지 않습니다 ... 그래서 런타임시 장치 너비와 높이를 읽을 수 없습니다. 내가 setContentView 주석 처리되지 않은 onSizeChanged 작품을 떠날 경우 ...하지만 화면이 비어 있습니다!내 사용자 정의보기가 나타나지 않는 이유는 무엇입니까?
런타임시 화면 너비와 높이를 읽고 최적의 크기가되도록 만들기시 내 ImageViews의 크기를 설정할 수 있기를 원합니다.
공용 클래스 게임 활동 OnClickListener를 {
개인 BoardView boardView를 구현 확장;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boardView = new BoardView(this);
setContentView(boardView); // when this line disabled, it looks ok
boardView.requestFocus();
}
공개 클래스 BoardView 확장보기 { private final Game game; 전용 플로트 너비; // 한 단위의 너비 전용 플로트 높이; // 한 단위의 높이
public BoardView (컨텍스트 컨텍스트) { super (컨텍스트); this.game = (게임) 컨텍스트; setFocusable (true); setFocusableInTouchMode (true);
LinearLayout maincontainer = new LinearLayout(game);
maincontainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
maincontainer.setGravity(Gravity.CENTER);
maincontainer.setOrientation(LinearLayout.VERTICAL);
maincontainer.setBackgroundColor(Color.BLACK);
LinearLayout innercontainer = new LinearLayout(game);
innercontainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
innercontainer.setGravity(Gravity.CENTER);
innercontainer.setOrientation(LinearLayout.HORIZONTAL);
// declare a new table
TableLayout layout = new TableLayout(game);
layout.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
// build a grid of ImageViews in a TableLayout
for (int f=1; f<=7; f++) {
TableRow tr = new TableRow(game);
for (int c=1; c<=7; c++) {
ImageView b = new ImageView(game);
b.setImageResource(R.drawable.neworb);
b.setOnClickListener(game);
tr.addView(b, 30,30); // I'd like to not use fixed values here
} // for
layout.addView(tr);
} // for
innercontainer.addView(layout);
maincontainer.addView(innercontainer);
game.setContentView(maincontainer);
}가
@Override 보호 보이드가 onSizeChanged (INT INT H, INT oldw, INT oldh, w) = { 폭/9F w; 높이 = 너비;
super.onSizeChanged (w, h, oldw, oldh); }
은}
***************** 사실, 그렇게 좋은 해결책은 아닙니다. 예, 효과가있었습니다. 하지만 .... 이제 새로운 객체를 만들고 각 스크린을 그려서 던져 버립니다. 아주 나쁜 형태. LogCat은 내가 가비지 컬렉터를 초과 근무 중이라고 알려줍니다. – DeadTime
나는 실제로 다른 것을 찾기 위해 이곳을 우연히 발견했지만 독자가 자신의 솔루션을 게시하고 미래의 독자들에게 그 단점에 대해 경고 할 시간을 가졌다는 것을 알 수 없었습니다. 나는 그것으로부터, 슬프게도 이익을 얻지 않을 것이다. 그러나 나는 많은 사람들이 확신 할 것이다. 고맙습니다! – slezica