2010-11-25 8 views
2

Je veux simplement définir la hauteur d'un composant EditText à 50% de la hauteur de l'écran de l'utilisateur.Comment faire pour définir dynamiquement la hauteur EditText

Je crée la mise en page initiale à partir d'un fichier xml (main.xml), chargé dans le composant onCreate (Bundle) de l'activité. De la configuration xml, je comprends comment définir la hauteur EditText à une valeur littérale, par exemple, android: layout_height = "150dip", et à partir de onCreate (Bundle), je comprends que je peux appeler setHeight (int) sur le composant EditText , mais l'appel à setHeight (int) semble être ignoré, et si je n'ai pas le paramètre layout_height dans le fichier XML, alors je reçois une exception lorsque mon application démarre, se plaignant que la valeur de hauteur est requise (et l'application meurt).

Existe-t-il un moyen de définir la hauteur à partir du fichier XML en fonction de la hauteur de l'écran de l'utilisateur? En d'autres termes, dans le XML, est-il possible de récupérer la hauteur de l'écran de l'utilisateur et de l'utiliser pour calculer une valeur pour un composant?

(Je place la EditText dans un LinearLayout avec une orientation verticale.)

+0

Thane, pourquoi êtes-vous en train d'essayer de définir le modifier le texte height.Is ce dû au clavier logiciel couvre votre espace et bloque la vue? – 100rabh

+0

Ce champ de saisie accepte de nombreuses lignes de texte et je souhaite que l'utilisateur puisse voir plus d'une ligne sur l'écran. –

Répondre

5

Utilisez une disposition linéaire, régler le poids du EditText à 1, puis ajouter une autre vue vide et mettre son poids à 1 et .

+0

+1 Probablement plus facile que ma solution. : -} –

+0

Merci :) android: le poids est tellement sous-estimé. Il est temps de passer le mot :) – EboMike

0

En Java, vous pouvez essayer ceci:

package com.stackoverflow.q4274819; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.view.WindowManager; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

public class Q4274819 extends Activity { 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     DisplayMetrics metrics = new DisplayMetrics(); 
     WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); 
     wm.getDefaultDisplay().getMetrics(metrics); 
     final float height = metrics.heightPixels; 

     EditText e = (EditText) findViewById(R.id.edit); 
     e.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, (int) (height/2))); 

     LinearLayout l = (LinearLayout) findViewById(R.id.layout); 
     l.requestLayout(); 
    } 
} 

Étant donné une mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
     > 
    <EditText android:id="@+id/edit" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/hello" 
      /> 
</LinearLayout> 
0

Merci pour les réponses. À la place, j'ai pensé à autre chose.

Dans le fichier XML, au lieu de spécifier une valeur numérique littérale, par ex. "200dip", pour android: layout_height, et si seulement "fill_parent" est utilisé, alors la valeur définie dans l'Activity avec l'appel à setHeight (int) n'est pas ignorée.

Bien que, je ne l'ai pas encore regardé si cela fonctionne par la conception ou est juste un petit problème ...

Questions connexes