Nie mogę pobrać elementów, na przykład ListView
, aby zmienić rozmiar poprawnie.Jak ustawić rozmiar i układ w onSizeChanged?
Mam do wyszukiwania ListActivity
, z deską rozdzielczą, polem edycji i widokiem listy. Chodzi o to, aby ukryć pasek akcji podczas wyświetlania klawiatury.
ja przedłużony LinearLayout
, aby słuchać, aby wyświetlić zmiany rozmiaru (jak zaleca here):
public class SizeChangingLinearLayout extends LinearLayout {
//...
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
View actionbar = mainView.findViewById(R.id.actionbar);
if (yNew > yOld)
actionbar.setVisibility(View.VISIBLE);
else if (yNew < yOld)
actionbar.setVisibility(View.GONE);
super.onSizeChanged(xNew, yNew, xOld, yOld);
}
}
Ukrywanie/pokazywanie z actionbar działa zgodnie z oczekiwaniami, ale istnieje luka poniżej ListView
tej samej wysokości, co ukryty pasek akcji. Gdy tylko nastąpi zmiana grafiki (np. Wpisanie w polu edycji), ListView
wypełnia lukę. Podobne zachowanie pojawia się w odwrotnej kolejności podczas ukrywania klawiatury.
[Edytuj]
Ten sam problem pojawia się również w innych zmieniając układ. Zmiana Visibility
rzeczy w onSizeChanged
pokazuje się bezpośrednio, ale zmiana rozmiarów i marginesów nie jest wyświetlana, dopóki inna akcja użytkownika nie przerysuje tych widoków. Unieważnienie nie działa od onSizeChanged
.
[/ Edit]
Próbowałem odświeżyć grafikę według:
invalidate
-ing zarówno zwyczaj LinearLayout i tymListView
(jak zaleca here)notifyDataSetChanged
na lista: adapterforceLayout
... i więcej bez powodzenia. Dlaczego zmiana rozmiaru ListView
nie jest na początku? Czy w rozszerzonym LinearLayout muszę zastąpić onLayout
? Co przeoczyłem?
Nie każdy aktualizacja działa, zauważyłem. "Jak tylko zmieni się grafika", napisałem. Ale na przykład wyskakujące okienko nie spowoduje wprowadzenia zmian. Myślę, że właściwe elementy muszą zostać unieważnione, ale nie. – JOG
Problem pojawia się również przy wszystkich zmianach układu, na przykład przy zmianie marginesów EditText. Jednak elementy wstawiania elementów, na przykład przycisk po prawej stronie pudełka, są wyświetlane natychmiast. – JOG