사용자 정의보기를 사용하여 Android 응용 프로그램을 만들고 있습니다. 전에 여러 번 해본 적이 있지만 이번에는 이상한 문제가 발생한 것 같습니다.안드로이드 레이아웃이 레이아웃으로 레이아웃되지 않습니다. 사용자 정의보기가 예상대로
XML 또는 레이아웃 편집기를 통해 레이아웃을 만들려고 할 때 내 사용자 지정보기가 예상대로 레이아웃되지 않습니다. 기존 뷰의 오른쪽에 내 뷰 중 하나를 배치하면 뷰가 왼쪽에 정렬 된 것처럼 보입니다. 나는 무슨 뜻인지 보여주기 위해 이미지를 첨부했습니다.
나는 다른 어떤보기에도 나타나지 않으며, 비슷한 응용 프로그램을 사용 했음에도 불구하고 이전에 어떤 일도 일어나지 않았습니다. 사용자 정의보기 용 코드.
누구도 이와 같은 문제가 발생 했습니까? 그렇다면 어떤 제안입니까?
요청시보기 및 기타 관련 가능성이있는 코드 용 코드를 넣을 수 있습니다.
EDIT - 좋아요, 요청대로 코딩하고, 잘하면 그것은 너무 많은 사람을 기분을 상하게하지 않습니다.
XML :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.offthemap.sudokusolver.SudokuButton
android:id="@+id/sudokuButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<com.offthemap.sudokusolver.SudokuButton
android:id="@+id/sudokuButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/sudokuButton2" />
</RelativeLayout>
사용자 정의보기 :
package com.offthemap.sudokusolver;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
public class SudokuButton extends View
{
private static Bitmap background, border, borderSelected;
private static Bitmap[] number;
private static int size = 100;
private int numberIndex = -1;
public SudokuButton(Context context, AttributeSet attrs)
{
super(context);
Resources res = getResources();
if (background == null){background = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.background), size, size, false);}
if (border == null){border = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.border), size, size, false);}
if (borderSelected == null){borderSelected = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.borderselected), size, size, false);}
if (number == null)
{
number = new Bitmap[]{
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.one), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.two), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.three), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.four), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.five), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.six), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.seven), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.eight), size, size, false),
Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.nine), size, size, false)
};
}
}
public void increaseNumber()
{
numberIndex++;
if (numberIndex == 9){numberIndex = -1;}
invalidate();
}
public void setNumber(int newNumber)
{
numberIndex = newNumber;
}
public static void setSize(int newSize)
{
size = newSize;
}
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(background, 0, 0, null);
if (numberIndex != -1)
{
canvas.drawBitmap(number[numberIndex], 0, 0, null);
}
canvas.drawBitmap(border, 0, 0, null);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));
}
private int measureWidth(int measureSpec)
{
int preferred = background.getWidth();
return getMeasurement(measureSpec, preferred);
}
private int measureHeight(int measureSpec)
{
int preferred = background.getHeight();
return getMeasurement(measureSpec, preferred);
}
private int getMeasurement(int measureSpec, int preferred)
{
int specSize = MeasureSpec.getSize(measureSpec);
int measurement = 0;
switch(MeasureSpec.getMode(measureSpec))
{
case MeasureSpec.EXACTLY:
measurement = specSize;
break;
case MeasureSpec.AT_MOST:
measurement = Math.min(preferred, specSize);
break;
default:
measurement = preferred;
break;
}
return measurement;
}
}
SECOND 편집 - 그것을 해결하기 위해 듯, 확실하지 않은 정적 비트 맵을 사용하여이 일어나고 있지만 제거하는 이유와 단지 문제가 있었다 나타납니다 .
xml 콘텐츠가 좋을뿐만 아니라 사용자 정의보기의 코드입니다. – Niko