LinearLayout中的中心图像,带有重量

时间:2014-03-11 04:20:28

标签: android image user-interface gravity

这是我的问题的图像: enter image description here 绿色和红色矩形中的两个小图像是我想要居中的图像。它们应该分别直接落在两个父母的中间。

这就是为什么它不起作用(据我所知): 我已将包装器的宽度设置为0,以避免与每个包装器的权重设置冲突。这让我可以将屏幕分开到中间,并在两边划分内容。不幸的是,我认为这也意味着每个图像都试图将自己置于包装器的0dp部分,而不是由权重产生的动态宽度。

这是代码,请亲自看看:

public void mergeHotels(Hotel keepHotel, Hotel absorbHotel, ArrayList<Hotel> absorbArray){
    Context context = getApplicationContext();

    //get the current player and let him choose what to do with stock first
    Player thisPlayer = players[getPlayerIndexByPlayOrder(CURRENT_TURN)];

    //create the dialog for exchanging stocks       
    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme);
    AlertDialog.Builder stockExchangeDialog = new AlertDialog.Builder(ctw);
    stockExchangeDialog.setTitle(getResources().getString(R.string.stock_exchange_dialog_title));

    LinearLayout dialogLayout = new LinearLayout(context);
    dialogLayout.setOrientation(LinearLayout.VERTICAL);

        LinearLayout dialogHeader = new LinearLayout(context);
        dialogHeader.setOrientation(LinearLayout.HORIZONTAL);
        dialogHeader.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 50, 1.0f));

            View blankSpace = new View(context);
            blankSpace.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 2.0f));

            LinearLayout tileOneWrapper = new LinearLayout(context);
            tileOneWrapper.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
            tileOneWrapper.setBackgroundColor(Color.GREEN);

                ImageView tileOne = new ImageView(context);
                String tileOneResourceName = "tile_" + keepHotel.getName().toLowerCase();
                int tileOneResourceId = getResources().getIdentifier(tileOneResourceName, "drawable", getPackageName());
                tileOne.setBackgroundResource(tileOneResourceId);
                LinearLayout.LayoutParams tileOneParams = new LinearLayout.LayoutParams(40, 40);
                tileOneParams.gravity = Gravity.CENTER;
                tileOne.setLayoutParams(tileOneParams);



            tileOneWrapper.addView(tileOne);

            LinearLayout tileTwoWrapper = new LinearLayout(context);
            tileTwoWrapper.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
            tileTwoWrapper.setBackgroundColor(Color.RED);

                ImageView tileTwo = new ImageView(context);
                String tileTwoResourceName = "tile_" + absorbHotel.getName().toLowerCase();
                int tileTwoResourceId = getResources().getIdentifier(tileTwoResourceName, "drawable", getPackageName());
                tileTwo.setBackgroundResource(tileTwoResourceId);
                LinearLayout.LayoutParams tileTwoParams = new LinearLayout.LayoutParams(40, 40);
                tileTwoParams.gravity = Gravity.CENTER;
                tileTwo.setLayoutParams(tileTwoParams);

            tileTwoWrapper.addView(tileTwo);

        dialogHeader.addView(blankSpace);
        dialogHeader.addView(tileOneWrapper);
        dialogHeader.addView(tileTwoWrapper);

        LinearLayout dialogBody = new LinearLayout(context);
        dialogBody.setOrientation(LinearLayout.VERTICAL);   

        for (int i = 0; i < players.length; i++) {
            LinearLayout playerStockDetails = new LinearLayout(context);
            playerStockDetails.setOrientation(LinearLayout.HORIZONTAL);

                TextView playerName = new TextView(context);
                playerName.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));

                TextView playerMoney = new TextView(context);
                playerMoney.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));

                TextView playerTileOneQuantity = new TextView(context);
                playerTileOneQuantity.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
                playerTileOneQuantity.setBackgroundColor(Color.LTGRAY);

                TextView playerTileTwoQuantity = new TextView(context);
                playerTileTwoQuantity.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
                playerTileTwoQuantity.setBackgroundColor(Color.CYAN);

                playerName.setText(players[i].getName());
                playerMoney.setText(String.valueOf(players[i].getMoney()));
                playerTileOneQuantity.setText(String.valueOf(players[i].getStockQuantityByCode(getHotelCodeByName(keepHotel.getName()))));
                playerTileTwoQuantity.setText(String.valueOf(players[i].getStockQuantityByCode(getHotelCodeByName(absorbHotel.getName()))));

            playerStockDetails.addView(playerName);
            playerStockDetails.addView(playerMoney);
            playerStockDetails.addView(playerTileOneQuantity);
            playerStockDetails.addView(playerTileTwoQuantity);
            playerStockDetails.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));

            dialogBody.addView(playerStockDetails);
        }

    dialogLayout.addView(dialogHeader);
    dialogLayout.addView(dialogBody);       

    stockExchangeDialog.setView(dialogLayout);
    stockExchangeDialog.show();
}

那么我如何根据动态宽度(基于权重)使图像居中,而不是我在LayoutParams中声明的静态宽度?

提前感谢您的帮助!

JRadTheBad

1 个答案:

答案 0 :(得分:1)

试试这个..

LinearLayout LayoutParams

中添加此行
tileOneWrapper.gravity = Gravity.CENTER;

以及

tileTwoWrapper.gravity = Gravity.CENTER;