проблема с добавлением текстовых представлений в linearlayout программно - PullRequest
0 голосов
/ 27 октября 2018

У меня Linearlayout с 1 или 2 linearlayouts зависит от конкретного имени. Когда у меня короткое имя, которое входит в 1 строку, я использую 1 линейный макет и текстовые представления в нем программно, и у меня нет проблем с этим макетом - линейный макет соответствует его родительскому элементу и получает все пространство. Но когда у меня длинное имя, которое вводится только в 2 строки, я использую 2 linearlayout, чтобы у каждого из них был рост 0,5, и к каждому из них я программно добавлял текстовые представления, и когда представление создается, я не могу видеть текстовые представления в первое линейное расположение, по какой-то причине они не отображаются на экране. но когда я начинаю решать имя и добавляю текст в каждое текстовое представление, оно всплывает. Я искал везде, но я не могу найти ответ на эту проблему. Я добавил gif, чтобы вы увидели проблему, и я добавляю свой код.

GIF вида

Функция, которая создает макеты (класс расширяется от Linearlayout).

private void buildSolutionLettersLayout(){
    try {
        int maximumCharsInRow, letterTvSize;
        if (mLogoName.length() >= 14) {
            maximumCharsInRow = 13;
            letterTvSize = mScreenWidth / 15;
        } else {
            maximumCharsInRow = 11;
            letterTvSize = mScreenWidth / 13;
        }

        LinearLayout firstRow = new LinearLayout(getContext());
        LinearLayout secondRow = new LinearLayout(getContext());

        firstRow.setOrientation(LinearLayout.HORIZONTAL);
        secondRow.setOrientation(LinearLayout.HORIZONTAL);

        if (mLogo.getmLanguage() == Constants.LANGUAGE_ENGLISH) {
            setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
        } else {
            setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
        }

        boolean isFirstRow = true;
        boolean isSeparator;
        boolean isAfterSpace = false;
        int firstRowLength = 0;

        for (int i = 0; i < mLogoName.length(); i++) {
            LinearLayout.LayoutParams layoutParamsLetterTv = new LinearLayout.LayoutParams(letterTvSize, letterTvSize);
            layoutParamsLetterTv.setMargins(LETTERS_MARGIN, 0, LETTERS_MARGIN, 0);

            AutoResizeTextView solutionLetterTv = new AutoResizeTextView(getContext());

            solutionLetterTv.setLayoutParams(layoutParamsLetterTv);
            solutionLetterTv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, MAX_TEXT_SIZE);
            solutionLetterTv.setEms(1);
            solutionLetterTv.setGravity(Gravity.CENTER);
            solutionLetterTv.setTextColor(LETTER_TEXT_COLOR);
            solutionLetterTv.setTag(false);
            solutionLetterTv.setVisibility(View.VISIBLE);

            isSeparator = false;
            if (mLogo.getmLastTry().charAt(i) == Constants.SOLVED_SOLUTION_LETTER_BY_HELP) {
                solutionLetterTv.setTextColor(REMOVED_SOLUTION_LETTER_TEXT_COLOR);
                solutionLetterTv.setText(String.valueOf(mLogoName.charAt(i)));
                solutionLetterTv.setBackgroundResource(R.drawable.background_letter_solution);
            } else if (mLogo.getmLastTry().charAt(i) == Constants.SOLUTION_LETTER_WITHOUT_VALUE) {
                solutionLetterTv.setText("");
                solutionLetterTv.setBackgroundResource(R.drawable.background_letter_solution);
            } else if (isSeparator(mLogo.getmLastTry().charAt(i))) {
                solutionLetterTv.setTag(true);
                solutionLetterTv.setText(String.valueOf(mLogo.getmLastTry().charAt(i)));
                solutionLetterTv.setTextColor(SEPARATOR_TEXT_COLOR);
                if (mLogo.getmLastTry().charAt(i) != APOSTROPHE) {
                    isSeparator = true;
                    if (mLogo.getmLastTry().charAt(i) == SPACE)
                        solutionLetterTv.setVisibility(View.INVISIBLE);
                }
            } else {
                solutionLetterTv.setText(String.valueOf(mLogo.getmLastTry().charAt(i)));
                solutionLetterTv.setBackgroundResource(R.drawable.background_letter_solution);
            }

            if (mLogo.getmStatus() == STATUS_SOLVED && !mLogo.ismIsForFastGame()) {
                solutionLetterTv.setTextColor(LETTER_TEXT_COLOR);
                solutionLetterTv.setText(String.valueOf(mLogoName.charAt(i)));
            }

            if (isFirstRow && isAfterSpace) {
                int l = i;
                String tempLogoName = mLogoName;
                while (l < tempLogoName.length() && (!isSeparator(tempLogoName.charAt(l)) || tempLogoName.charAt(i) == APOSTROPHE))
                    l++;
                int nextWordLength = l - i + 1;
                if (nextWordLength + firstRowLength > maximumCharsInRow) {
                    isFirstRow = false;
                    if (mArrayOfLettersTvs.get(i - 1).getText().charAt(0) == SPACE)
                        mArrayOfLettersTvs.get(i - 1).setVisibility(GONE);
                    rowSpacePos = i-1;
                }
                isAfterSpace = false;
            }

            if (isSeparator)
                isAfterSpace = true;

            if (isFirstRow) { //while first row
                firstRowLength++;
                firstRow.addView(solutionLetterTv);
            } else { //while second row
                secondRow.addView(solutionLetterTv);
            }
            mArrayOfLettersTvs.add(solutionLetterTv);
        }

        if (secondRow.getChildCount() == 0) { //There is only 1 row
            firstRow.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            firstRow.setGravity(Gravity.CENTER);

            addView(firstRow);

            if (mLogoName.length() > 11) {
                for (TextView textView : mArrayOfLettersTvs) {
                    letterTvSize = mScreenWidth / (mLogoName.length() + 2);
                    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(letterTvSize, letterTvSize);
                    lp.setMargins(LETTERS_MARGIN, 0, LETTERS_MARGIN, 0);
                    textView.setLayoutParams(lp);
                }
            }
        } else { // There are 2 rows
            LinearLayout.LayoutParams rowsParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f);
            firstRow.setLayoutParams(rowsParams);
            secondRow.setLayoutParams(rowsParams);

            firstRow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
            secondRow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);

            View rowsSpace = new View(getContext());
            LayoutParams rowsSpaceParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ROWS_MARGIN);
            rowsSpace.setLayoutParams(rowsSpaceParams);

            addView(firstRow);
            addView(rowsSpace);
            addView(secondRow);
        }
    } catch (Exception e){
        Logger.e(Logger.TEST, e.getMessage(), e);
        ExceptionManager.getInstance().handleError(ExceptionManager.errorTypes.NAVIGATION, this, ((FragmentActivity)getContext()));
    }
}

Дайте мне знать, если вам нужно больше частей моего кода ...

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