ustawia wysokość widoku obrazu jako dopasowaną programowo

84

Muszę ustawić wysokość na ImageView jako matchparent programatically.if jest stała wysokość wiem jak ustawić.

ale jak mogę ustawić to jako nadrzędne?

EDYTOWAĆ:

w rzeczywistości wysokość układu nadrzędnego jest dynamiczna, więc muszę ustawić wysokość obrazu jako wysokość elementu nadrzędnego.

andro-girl
źródło
2
Wypróbowałem wszystkie metody wymienione w odpowiedziach. ale to nie jest ustawienie wysokości jako rodzica dopasowania :(
andro-girl
1
Powinieneś przejrzeć zaakceptowaną odpowiedź
CularBytes

Odpowiedzi:

-20

zainicjuj LayoutParams.

przypisz szerokość i wysokość rodzica i przekaż je do metody setLayoutParams w imageview

Lucky Luke
źródło
3
nigdy nie należy przekazywać rodzicom rzeczywistych wymiarów. Zawsze używaj MATCH_PARENT zamiast rzeczywistych wartości. Ogólnie nie polecałbym używania rozmiarów absolutnych, ponieważ może wyglądać zupełnie inaczej na wszystkich ekranach. Wolałbym używać odważników.
Daniel Bo
12
Szczerze mówiąc, powinien to być komentarz
Neon Warge
259
imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
C. Leung
źródło
12
W momencie, gdy naciskam Alt + Enter w LayoutParams, widzę tak wiele klas. Czy możesz mi powiedzieć, którego użyć?
Uday
jaki jest pogląd rodziców?
C. Leung,
4
Powinieneś użyć klasy widoku, którą chcesz ustawić LayoutParams, czyli użyć LinearLayout.LayoutParams, aby ustawić wózki na Twój LL :)
Andrew
Co zrobić, jeśli chcesz, aby wysokość była dynamiczna na podstawie wymiarów oryginalnego obrazu, ale szerokość miała być MATCH_PARENT?
Taylor
import android.view.ViewGroup
Alan Nelson
57
imageView.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT;
Luke Allison
źródło
7
Jeśli ustawiasz parametry po raz pierwszy, ponieważ widok obrazu wykonałeś programowo, spowoduje to zerowy błąd wskaźnika (lub wystąpi z widokiem tekstu) i powinien być wszędzie indziej.
Tatarize
15
imageView.setLayoutParams
    (new ViewGroup.MarginLayoutParams
        (width, ViewGroup.LayoutParams.MATCH_PARENT));

Typ parametrów układu zależy od nadrzędnej grupy widoków. Jeśli umieścisz niewłaściwy, spowoduje to wyjątek.

xandy
źródło
1
co to jest „szerokość”?
FlorianB
9

Dla użytkowników Kotlin

val params = mImageView?.layoutParams as FrameLayout.LayoutParams
params.width = FrameLayout.LayoutParams.MATCH_PARENT
params.height = FrameLayout.LayoutParams.MATCH_PARENT
mImageView?.layoutParams = params

Tutaj użyłem, FrameLayout.LayoutParamsponieważ mój ImageViewrodzic widoki ( ) jestFrameLayout

Muhamed Riyas M.
źródło
4

Miałem ten sam problem. Rozwiązane przez najpierw ustawienie:

imageView.setMinHeight(0);
imageView.setMinimumHeight(0);

I wtedy :

imageView.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT;

setMinHeight jest definiowana przez ImageView, podczas gdy setMinimumHeight jest definiowana przez View. Zgodnie z dokumentacją używana jest większa z dwóch wartości, więc obie muszą być ustawione.

fisio
źródło
3

Możesz spróbować tego w przypadku, gdy chcesz dopasować rodzica. Rozmieszczenie wymiarów to szerokość i wysokość w kolejności

web = new WebView(this);
        web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

źródło
1

Możesz użyć stałej MATCH_PARENT lub jej wartości numerycznej -1.


źródło
1
MATCH_PARENT nie jest zdefiniowany w kontekście. Musisz powiedzieć „LayoutParams.MATCH_PARENT”
Akshat Agarwal