Autore Topic: Settare android:height tramite Java  (Letto 364 volte)

Offline franci22

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: +1
    • Mostra profilo
    • Franci22 Apps
  • Dispositivo Android:
    Meizu M2 Note
  • Sistema operativo:
    Windows 10
Settare android:height tramite Java
« il: 19 Ottobre 2015, 21:29:24 CEST »
0
Ciao a tutti,
ho una ListView e vorrei settare tramite Java la seguente riga (in XML):
Codice (XML): [Seleziona]
android:layout_height="VALOREinDP"Ho già provato a usare il seguente codice:
Codice (Java): [Seleziona]
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = ILMIOVALOREinDP;
        listView.setLayoutParams(params);
        listView.requestLayout();
ma non fa al caso mio.
Come potrei fare?
Grazie a tutti :-P

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 616
  • Respect: +136
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Settare android:height tramite Java
« Risposta #1 il: 20 Ottobre 2015, 10:17:44 CEST »
0
Il procedimento che hai usato è giusto, ma devi convertire i DP in pixel.

Ci sono vari modi per farlo, uno è questo:

Codice (Java): [Seleziona]
Resources r = listView.getContext().getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ILMIOVALOREinDP, r.getDisplayMetrics());

Oppure puoi usare displayMetrics, ma è un po' meno lineare...

Codice (Java): [Seleziona]
DisplayMetrics displayMetrics = listView.getContext().getResources().getDisplayMetrics();
int px = Math.round(ILMIOVALOREinDP * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline franci22

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: +1
    • Mostra profilo
    • Franci22 Apps
  • Dispositivo Android:
    Meizu M2 Note
  • Sistema operativo:
    Windows 10
Re:Settare android:height tramite Java
« Risposta #2 il: 20 Ottobre 2015, 14:10:19 CEST »
0
Scusa forse non mi sono spiegato bene. Allora il mio problema è questo: ho una listview a cui voglio dare (da Java) l'altezza dello schermo.
Per calcolare l'altezza uso:
Codice (Java): [Seleziona]
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
final int screendimension = size.y;
Per settare le dimensioni della listview usavo il codice del primo post imposando come params.height l'int screendimension soltanto che la listview diventava non scrollabile, o meglio si scrollava fino ad un certo punto e poi basta.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 616
  • Respect: +136
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Settare android:height tramite Java
« Risposta #3 il: 20 Ottobre 2015, 15:02:46 CEST »
0
Infatti non ti sei spiegato bene.
Il problema che riscontri dipende dal fatto che tu leggi la dimensione dello schermo, ma di fatto l'area utile è inferiore per cui la listview scorre solo fino ad un certo punto.
In pratica non vedi la parte finale del listview, che finisce oltre lo schermo.
Io ti consiglierei di leggere l'altezza della della vista che incornicia l'activity ed impostare l'altezza del tuo listview pari a quella:

Codice (Java): [Seleziona]
ViewGroup root = (ViewGroup)((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
ViewGroup.LayoutParams rootParams = root.getLayoutParams();
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = rootParams.height;
listView.setLayoutParams(params);
listView.requestLayout();

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline franci22

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: +1
    • Mostra profilo
    • Franci22 Apps
  • Dispositivo Android:
    Meizu M2 Note
  • Sistema operativo:
    Windows 10
Re:Settare android:height tramite Java
« Risposta #4 il: 20 Ottobre 2015, 18:28:09 CEST »
0
Grazie  :)
E se volessi calcolare la dimesione di tutti gli item e impostarla come height?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 616
  • Respect: +136
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Settare android:height tramite Java
« Risposta #5 il: 20 Ottobre 2015, 18:35:33 CEST »
0
Non avrebbe molto senso utilizzare un ListView in questo modo.
Gli elementi del ListView vengono istanziati (e riciclati) solo quando sono visualizzati, quindi non sarebbe nemmeno banale farlo.

In pratica un ListView associato ad un array di 1000 elementi potrebbe avere solo 10 o 20 View figlie al suo interno, che ricicla di volta in volta (la View che rappresenta la riga che scompare in basso viene riutilizzata per la riga che comparirà in alto).

Ti converrebbe usare un LinearLayout ed aggiungere i vari item con mioLinearLayout.addView(item);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline franci22

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: +1
    • Mostra profilo
    • Franci22 Apps
  • Dispositivo Android:
    Meizu M2 Note
  • Sistema operativo:
    Windows 10
Re:Settare android:height tramite Java
« Risposta #6 il: 20 Ottobre 2015, 18:47:16 CEST »
0
Del mio problema ne avevo già parlato in questo post: ListView troppo piccola - Android Developers Italia
Adesso invece di mettere il valore 400dp volevo impostarlo tramite java e quindi avevo pensato di creare un'altro post.