Czy ktoś może mi pomóc, jak ustawić szerokość TextView
do wrap_content
kodu, a nie z XML?
Tworzę dynamicznie TextView
w kodzie, więc czy jest jakiś sposób, jak ustawić jego szerokość w wrap_content
kodzie?
TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
Dla różnych układów, takich jak ConstraintLayout
i inne, mają swoje własne LayoutParams
, takie jak:
pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
lub
parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Jest inny sposób na osiągnięcie tego samego rezultatu. Jeśli potrzebujesz ustawić tylko jeden parametr, na przykład „wysokość”:
TextView textView = (TextView)findViewById(R.id.text_view); ViewGroup.LayoutParams params = textView.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; textView.setLayoutParams(params);
źródło
LinearLayout
, nie wydaje się, żell.invalidate()
jest to konieczne. Czemu?Rozwiązanie do zmiany
TextView
szerokości zawijania zawartości .textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; textView.requestLayout(); // Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). // If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout() // Another useful example // textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel
źródło
Publikuję wielowierszowy edittext Android Java.
EditText editText = findViewById(R.id.editText);/* edittext access */ ViewGroup.LayoutParams params = editText.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; editText.setLayoutParams(params); /* Gives as much height for multi line*/ editText.setSingleLine(false); /* Makes it Multi line */
źródło
Myślę, że ten kod odpowiada na twoje pytanie
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.desc1.getLayoutParams(); params.height = RelativeLayout.LayoutParams.WRAP_CONTENT; holder.desc1.setLayoutParams(params);
źródło
Mała aktualizacja tego postu: jeśli używasz ktx w swoim projekcie na Androida, istnieje mała metoda pomocnicza, która znacznie ułatwia aktualizację LayoutParams.
Jeśli chcesz zaktualizować np. Tylko szerokość, możesz to zrobić za pomocą następującej linii w Kotlinie.
źródło