setLayoutParams() la méthode ne fonctionne pas
J'ai fais un code qui modifie sa taille en fonction de la taille de l'écran son application fournit. Il obtient la totalité de la largeur et de la hauteur(ou la vue de w et h) par onSizeChanged() et onDraw() les méthodes de Vue.
Il a bien fonctionné dans un autre code mais maintenant, il affiche un message d'erreur à chaque fois que j'ai essayé de mettre de la commande " setLayoutParams ()', pourriez-vous svp m'aider à comprendre ce problème? Le setLayoutParams() ne fait pas de travailler n'importe où dans le code. Ci-dessous est la classe principale de code.
public class ManipulateDesign extends Activité {
private LinearLayout ll;
private le ScrollView sv;
private TextView télévision;
/** Appelée lorsque l'activité est d'abord créé. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.présentation.main);
ll = (LinearLayout) findViewById(R.id.ll);
sv = (le ScrollView) findViewById(R.id.sv);
tv = new TextView(ce);
tv.setText("Vous êtes dans la première ScrollView\n" +
"- Univers Vivant \n" +
"Voulez (sur une étoile) j'Espère être de nouveau)\n" +
"vous pouvez trouver, quand tout est fait et, à travers!\n" +
"Si tout, fait un vœu à enregistrer, la star serait-il en vain?\n" +
"d'autant qu'il détient, trop chers pour partie, de nombreuses façons de voir la lumière de réponses!\n" +
"Pour tous était une fois, juste de loin, que l'on espère tous disparu, de sorte qu'aucune ne peut briser, ni cassant mon coeur\n" +
"non, plus jamais, jusqu'à la fin");
sv.addView(télévision);
ChangeSizeView csv = new ChangeSizeView(getcontexteapplication());
ll.addView(csv);
}
class ChangeSizeView extends Afficher{
int newWidth;
int newHeight;
public ChangeSizeView(Contexte contexte) {
super(contexte);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
newWidth = w;
newHeight = h;
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Toile toile) {
//CETTE COMMANDE FAIT UNE ERREUR(et pas seulement dans cette méthode, mais n'importe où dans le code entier) MAIS BIEN FONCTIONNÉ DANS un AUTRE CODE
sv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, (newHeight - 100)));
super.onDraw(toile);
}
}
}
Et c'est mon main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/ll"
>
<ScrollView android:id="@+id/sv"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</ScrollView>
</LinearLayout>
C'est le logcat logo qui affiche des messages d'erreur
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): FATAL EXCEPTION: main
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.LinearLayout.measureVertical(LinearLayout.java:355)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.View.measure(View.java:8171)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.View.measure(View.java:8171)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.View.measure(View.java:8171)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.View.measure(View.java:8171)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.os.Handler.dispatchMessage(Handler.java:99)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.os.Looper.loop(Looper.java:123)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at java.lang.reflect.Method.invokeNative(Native Method)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at java.lang.reflect.Method.invoke(Method.java:521)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-11 06:39:52.148: ERROR/AndroidRuntime(2952): at dalvik.system.NativeStart.main(Native Method)
Pourriez-vous être plus précis à propos de l'erreur, par exemple post LogCat de sortie s'il vous plaît?
Je vous remercie pour votre réponse rapide. Je vais le télécharger dès maintenant.
Je vous remercie pour votre réponse rapide. Je vais le télécharger dès maintenant.
OriginalL'auteur June | 2011-04-11
Vous devez vous connecter pour publier un commentaire.
Vous devez qualifier entièrement qui
LayoutParams
vous avez besoin, car il est contenu dans unLinearLayout
, vous devez utilisernew LinearLayout.LayoutParams
Bien le clignotement peut surgir comme
onDraw()
est appelée chaque fois que l'écran est redessiné (assez peu de temps d'une seconde 😉 et il calcule toujours lasv
la hauteur et la largeur de nouvelles... Déplacer lesv.setLayoutParams(...)
à un autre endroit, par exemple dans le onSizeChanged méthode, de sorte que c'est seulement une fois après sa taille mis à jour.Vous avez raison! Merci beaucoup pour votre rapide et de bonne réponse, Michael! Je vais donner la réponse, maintenant!
Content d'avoir pu aider, amusez-vous bien 😉 Mais assurez-vous de bien le tester 😉
OriginalL'auteur Michael Rose