Программное изменение высоты и ширины Textview

#android #layoutparams

#Android #layoutparams

Вопрос:

У меня есть textview, ширину которого я хочу изменить на match_parent, а высоту оставить в wrap_content. Он вложен в горизонтальное линейное представление. Это 2-й из 3 текстовых представлений, каждый из которых имеет вес 1. При запуске этого конкретного фрагмента он устанавливает две другие кнопки в

 previousButton.setVisibility(View.GONE);
nextButton.setVisibility(View.GONE);
  

TextView

            <TextView
                android:id="@ id/home"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="HOME"
                android:layout_weight="1"
                android:background="@drawable/button_selector"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:padding="10dp"
                android:gravity="center"
                android:textColor="#000000"
                android:textStyle="bold"
                android:onClick="home"
                />
  

Я использую следующее, чтобы попытаться изменить макет во фрагменте:

 homeButton.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
  

Когда я запускаю его, я получаю сообщение об ошибке:

 java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
  

Комментарии:

1. Ошибка довольно очевидна. Вы не можете привести ViewGroup к LinearLayout . Итак, я предположил, что ваш TextView родительский макет является Linear ?

Ответ №1:

Каков ваш родительский макет TextView? Линейный, относительный или что? Пример, если LinearLayout:

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
homeButton.setLayoutParams(params);
  

Вы должны создать param base на его родительском макете.

Ответ №2:

Предполагая, что ваш родитель является LinearLayout

 LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
homeButton.setLayoutParams(layoutParam);
  

Ответ №3:

Вы уже указали layout_width = «0dp» и layout_weight=»1″. Итак, когда другие две кнопки скроются. Эта кнопка «Домой» займет всю ширину. Но посмотреть.НЕВИДИМЫЙ не уберет их с занимаемой ширины. Вы должны использовать View.ИСЧЕЗЛИ так, что даже если они не видны, они не должны занимать ширину.

НЕВИДИМЫЙ:

  This view is invisible, but it still takes up space for layout purposes.
  

ИСЧЕЗ:

  This view is invisible, and it doesn't take any space for layout purposes.
  

Вам не нужно снова устанавливать параметры макета в Home TextView.

Комментарии:

1. Разработчик уже использовал представление. ПРОПАВШЕЕ свойство программно