#android #android_textview
Я создаю TextView в Java-коде и присваиваю ему стиль следующим образом: TextView mTextView = new TextView(new ContextThemeWrapper(mContext, R.style.myStyle), null, 0); Вот XML-код стиля: Но TextView в компоновке отображается некорректно. Я попробовал добавить эту команду в Java-код: mTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1)); и только тогда элемент стал правильно отображаться. В чём заключается такая потребность вызывать этот метод setLayoutParams, если я уже указал значение параметров android:layout_height, android:layout_weight и android:layout_width в стиле? То есть, мой вопрос заключается в том, почему без вызова в Java-коде метода setLayoutParams элементу не присваиваются значения android:layout_height, android:layout_weight и android:layout_width из стиля и как это исправить?
Ответы
Ответ 1
Так не очень хорошо делать при динамическом создании View изначально, старайтесь при динамической верстки все параметр использовать в коде, а стили выносить в отдельные классы, те создавать ваш StyleWrapper, иначе в вашем коде нет смысла не по производительности, не по структуре. Вы будуте дольше искать ошибки верстки постояно изучая несколько участков в коде. Хотя на практике есть примеры полностью динамической верстки больших приложений (telegram), и даже есть либы для упрощения. Не суть. Что касается ответа. Он прост. Никак setLayoutParams в вашем случае, не влияют на отображения вью если вы добавляете ваше View parent которого является LinearLayout. Вы прочитайте что такое ContextWrapper и для чего он необходим, уж точно не для того чтобы для всех View выставлять параметры, weight или gravity которые в большинстве случае не будут применены. у TextView применения стиля делается примерно так: TextViewCompat.setTextAppearance(textView, R.style.myStyle) для того чтобы вью добавить в любой parent необходимо сделать примерно так: TextView textView = new TextView(this); //создать textView.setText("всё хорошо"); //присвоить значение LinearLayout mainLayout = findViewById(R.id.mainLayout); mainLayout.addView(textView); // добавить View Если вы хотите данный View расположить определным образом у парента только тогда применяюстя LayoutParams, в зависимости какой парент у вас, это очень важно! textView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1)); //только сейчас вы выставляете вес = 1 mainLayout.addView(textView) // добавить View Исходя из этого вывод, вы не верно использовали стиль и когда создавали View не использовался weight 1, и ваша View скорей всего исчезала, после того как вы выставили ей вес через LayoutParams она начала отображаться. Аналоигчно и другим параметрам. Но чтоб такого не происходило, советую прочитать заголовок ответа. Успехов.
Комментариев нет:
Отправить комментарий