Как центрировать ячейку в TableRow с текстом и изображением вместе - PullRequest
0 голосов
/ 02 мая 2018

У меня есть таблица, которая программно заполнена TableRows. Последняя строка должна содержать текст (сумма зарплаты: "45K") и изображение рядом с текстом. Так что они вместе, с минимальным пространством между концом текста и изображения. Я сделал следующий код:

        LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        TableRow.LayoutParams params1 = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[6]);
        params1.gravity = Gravity.CENTER;
        linearLayout.setLayoutParams(params1);
        linearLayout.setGravity(Gravity.CENTER);

        TextView h1 = new TextView(context);
        h1.setText(SharedFunctions.makeSalaryString(scout.getSalary()));
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, (float) 0.9);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        h1.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);


        ImageView cash = new ImageView(context);
        params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, (float) 0.1);
        params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
        cash.setLayoutParams(params);
        cash.setImageDrawable(resources.getDrawable(R.mipmap.usd_sign));

        linearLayout.addView(h1);
        linearLayout.addView(cash);
        tableRow.addView(linearLayout);

Проблема в том, что он делает то, что хотел, но все это не по центру:

example

Как правильно их соединить и в то же время центрировать?

РЕДАКТИРОВАТЬ 1: Если я подставлю строку h1.setGravity (Gravity.RIGHT | Gravity.CENTER_VERTICAL);

по h1.setGravity (Gravity.CENTER);

Я получу это:

example2

Что не хорошо, потому что изображение с наличными показывает слишком далеко (должно быть как на первом рисунке). Хотя это решает проблему выравнивания центра.

РЕДАКТИРОВАТЬ 2: Код функции, которая заполняет строку элементами

public static TableRow createScoutRow(ScoutingPlayerJson scout, TableLayout tableLayout, Context context, Resources resources) {
    double[] weights = new double[]{0.1680, 0.2240, 0.1360, 0.0800, 0.0960, 0.1360, 0.1600};
    TableRow tableRow = new TableRow(context);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1);
    tableRow.setLayoutParams(lp);
    tableRow.setOrientation(TableRow.HORIZONTAL);
    tableRow.setBackgroundColor(resources.getColor(trainingPlayerSelectRowColor));
    tableRow.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
    tableRow.setTag(scout.getId());

    {
        TextView h1 = new TextView(context);
        h1.setText(String.valueOf(scout.getCoins()));
        TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[0]);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        h1.setGravity(Gravity.CENTER);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
        tableRow.addView(h1);
    }

    {
        TextView h1 = new TextView(context);
        h1.setText(scout.getFirstname().charAt(0) + ". " + scout.getSurname());
        TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[1]);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        h1.setGravity(Gravity.LEFT);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);

        tableRow.addView(h1);
    }

    {
        TextView h1 = new TextView(context);
        h1.setText(scout.getAge().toString());
        TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[2]);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        h1.setGravity(Gravity.CENTER);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);

        tableRow.addView(h1);
    }

    {
        TextView h1 = new TextView(context);
        h1.setText(scout.getBatThrowType().toString().substring(3));
        TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[3]);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        h1.setGravity(Gravity.CENTER);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);

        tableRow.addView(h1);
    }
    {
        LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        TableRow.LayoutParams params1 = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[4]);
        linearLayout.setLayoutParams(params1);
        linearLayout.setGravity(Gravity.CENTER);
        Set<String> set = Utils.fixPrefferedPositions(scout.getPrefferedPosition());
        int mysize = set.size();

        for (String position: set) {
            View imview = getImageViewByPosition(position, mysize, context);
            linearLayout.addView(imview);
        }
        tableRow.addView(linearLayout);
    }
    { 
        ImageView imview = getImageViewByRating(scout.getRating(), (float) weights[5], context);
        tableRow.addView(imview);
    }
    {
        LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        TableRow.LayoutParams params1 = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, (float) weights[6]);
        params1.gravity = Gravity.CENTER;
        linearLayout.setLayoutParams(params1); 
        linearLayout.setGravity(Gravity.CENTER);

        TextView h1 = new TextView(context);
        h1.setText(SharedFunctions.makeSalaryString(scout.getSalary()));
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, (float) 0.9);
        h1.setLayoutParams(params);
        h1.setTextColor(resources.getColor(standingsTableHeadTXT));
        //h1.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
        h1.setGravity(Gravity.CENTER);
        h1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);


        ImageView cash = new ImageView(context);
        params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, (float) 0.1);
        params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
        cash.setLayoutParams(params);
        cash.setImageDrawable(resources.getDrawable(R.mipmap.usd_sign));

        linearLayout.addView(h1);
        linearLayout.addView(cash);
        tableRow.addView(linearLayout);
    }
    return tableRow;
}

Часть макета, в которой определяется таблица (в которую добавляются строки):

            <!--0.08    0.08    0.25    0.09    0.14    0.15    0.21-->
            <TableLayout
                android:id="@+id/scoutsTable"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:divider="@drawable/divider_stand_table_list"
                android:showDividers="middle"
                android:isScrollContainer="true"
                android:stretchColumns="7"
                android:orientation="horizontal">

            </TableLayout>

        </android.support.v4.widget.NestedScrollView>

1 Ответ

0 голосов
/ 02 мая 2018

Попробуйте заменить эту строку

h1.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);

с этим

h1.setGravity(Gravity.CENTER);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...