0

これは私が私の中に得るものActivityです:

http://img855.imageshack.us/img855/2056/androidscreenshot.jpg

アクティビティはで埋められTableLayoutます。次に、100x100のシアンのビットマップを含む2つである2つTableLayoutで埋められます。黄色の領域は、TableViewの位置(1,1)のアクティビティの背景です。赤い領域は、位置(1,2)のアクティビティの背景です。TableRowView

問題は、位置(2,1)と(2,2)にある他の2つのシアンのビットマップが表示されないことです。問題は、最初の行のビューのサイズが幅ではサイズ変更されているが、高さではサイズ変更されていないことだと思います。したがって、最初の行のビューは2番目の行のビューを覆い隠します。

View両方に追加するViewGroup.LayoutParamsLayoutParams、一緒に追加するとWRAP_CONTENTjava.lang.ArithmeticException: divide by zero

これは私のコードです:

public class HIDActivity extends Activity
{

    boolean toggle = false;            
    TableLayout IFaceLayout;
    TableRow TButtons1;
    TableRow TButtons2;
    TableRow TArea;
    SimpleButton TButton1;
    SimpleButton TButton2;
    SimpleButton TButton3;
    SimpleButton TButton4;


    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);


        TButton1 = new SimpleButton(this);
        TButton2 = new SimpleButton(this);
        TButton3 = new SimpleButton(this);
        TButton4 = new SimpleButton(this);

        TButtons1 = new TableRow(this);
        TButtons2= new TableRow(this);

        TButtons1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );
        TButtons2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

        TButtons1.addView(TButton1);                
        TButtons1.addView(TButton2);
        TButtons2.addView(TButton3);
        TButtons2.addView(TButton4);

        IFaceLayout = new TableLayout(this);
        IFaceLayout.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );
        IFaceLayout.setStretchAllColumns(true);

        IFaceLayout.addView(TButtons1);
        IFaceLayout.addView(TButtons2);

        setContentView(IFaceLayout);
        IFaceLayout.requestLayout();
    }


    class SimpleButton extends View
    {
        BitmapDrawable ButtonImage;
        Paint Style;
        int i , j ;
        int width , heigth;

        public SimpleButton(Context context) 
        {
            super(context);
            Style = new Paint();

            if(toggle == false) 
            {    
                this.setBackgroundColor(Color.YELLOW);
                toggle = true;
            }    
            else 
            {    
                this.setBackgroundColor(Color.RED);
                toggle = false;
            }
        }

        @Override
        public void onDraw(Canvas canvas)
        {       
            ButtonImage = new BitmapDrawable(Bitmap.createBitmap(100 , 100 , Bitmap.Config.RGB_565)); 
            this.width = ButtonImage.getBitmap().getWidth();
            this.heigth = ButtonImage.getBitmap().getHeight();

            for(i = 0 ; i < width ; i++)
            {                
                for(j = 0 ; j < heigth ; j++)
                {
                    ButtonImage.getBitmap().setPixel(i, j, Color.CYAN);
                }
            }

            canvas.drawBitmap(ButtonImage.getBitmap() , 0 , 0 , Style);        
        }        
    }
}

誰かがこの問題で私を助けてくれませんか。

4

2 に答える 2

0

Gophermofurのヒントは部分的に正しいです。

MyView.setLayoutParamsを呼び出して、MyViewが含まれているオブジェクトのタイプに一致するLayoutオブジェクトを渡すのは正しいことです。ただし、コンテナが含まれているオブジェクトのサイズを制御できるようにするには、WRAP_CONTENTの代わりにMATCH_PARENTを使用する必要があります。

さらに、高さを手動で100に設定することを部分的に解決しました。つまり、次のようになります。

TButton1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT , 100); 

今、私は4つの正方形を取得します:

http://img152.imageshack.us/img152/1530/androidscreenshot3.jpg

于 2012-05-30T09:48:36.873 に答える
0

問題は、ビューを拡張するSimpleButtonがwrap_contentに垂直に設定されていないことのようです。

レイアウトパラメータを設定するときは、オブジェクトが存在するコンテナを使用する必要があります。レイアウトパラメータを定義するとき、あなたは本当に「これが私のオブジェクト/ビューがそれが収容されているコンテナのスペースを埋める方法です」と言っています。この場合、ボタンはテーブル行の内側に配置されるため、次のように、テーブル行に関連するレイアウトパラメータを定義する必要があります。

TButton1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

TButton2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

TButton3. [same thing]
TButton4. [same thing]

TableRowはテーブルレイアウト内に格納されているため、TableLayoutを基準にするようにTButtonレイアウトパラメータも変更する必要がある場合があります。

TButtons1.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );            
TButtons2.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) ); 

テーブルレイアウトも親レイアウト内に格納されます。それが何であるかはわかりませんが、それは(おそらく)xmlファイルのルートであり、おそらく相対レイアウトまたは線形レイアウトです。テーブルレイアウトパラメータは、それが置かれている親レイアウトに従って定義する必要があります。

IFaceLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );    
于 2012-05-29T15:08:46.277 に答える