web-dev-qa-db-fra.com

Android: ajouter une vue de texte à la mise en page linéaire par programme

J'essaie d'ajouter TextViews à ma mise en page définie par xml dans le code. J'ai une feuille XML, où beaucoup de Views sont définis. Mais je dois ajouter quelques vues dans le code, donc créez un LinearLayout dans la feuille xml:

<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:id="@+id/info"
Android:layout_height="wrap_content" 
Android:orientation="vertical">
</LinearLayout>

Et dans cette mise en page, j'aime bien ajouter mon TextView:

    View linearLayout =  findViewById(R.id.info);
    //LinearLayout layout = (LinearLayout) findViewById(R.id.info);


    TextView valueTV = new TextView(this);
    valueTV.setText("hallo hallo");
    valueTV.setId(5);
    valueTV.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

    ((LinearLayout) linearLayout).addView(valueTV);

Mais je ne reçois que le message d'erreur suivant:

: Java.lang.ClassCastException: Android.widget.TextView

Comment puis-je le faire?

Merci pour ton aide. Martin

121
Martin

essayez d'utiliser

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.info);
...
linearLayout.addView(valueTV);

assurez-vous également que les paramètres de disposition que vous créez sont LinearLayout.LayoutParams ...

98
Ben

Hey, j'ai vérifié votre code, il n'y a pas d'erreur grave dans votre code. c'est du code complet:

main.xml: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:id="@+id/info"
Android:layout_height="wrap_content" 
Android:orientation="vertical">
</LinearLayout>

c'est Stackoverflow.Java

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.ViewGroup.LayoutParams;
import Android.widget.LinearLayout;
import Android.widget.TextView;

public class Stackoverflow extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View linearLayout =  findViewById(R.id.info);
        //LinearLayout layout = (LinearLayout) findViewById(R.id.info);

        TextView valueTV = new TextView(this);
        valueTV.setText("hallo hallo");
        valueTV.setId(5);
        valueTV.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

        ((LinearLayout) linearLayout).addView(valueTV);
    }
}

copiez ce code et exécutez-le. c'est complètement sans erreur. prends soin de toi...

64
Pushpendra Kuntal

Vous pouvez ajouter un TextView à votre structure linéaire par programme de la manière suivante:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout);
TextView txt1 = new TextView(MyClass.this);
linearLayout.setBackgroundColor(Color.TRANSPARENT);
linearLayout.addView(txt1);
21
Deepak
for(int j=0;j<30;j++) {
    LinearLayout childLayout = new LinearLayout(MainActivity.this);
    LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT);
    childLayout.setLayoutParams(linearParams);

    TextView mType = new TextView(MainActivity.this);
    TextView mValue = new TextView(MainActivity.this);

    mType.setLayoutParams(new TableLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 1f));
    mValue.setLayoutParams(new TableLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 1f));

    mType.setTextSize(17);
    mType.setPadding(5, 3, 0, 3);
    mType.setTypeface(Typeface.DEFAULT_BOLD);
    mType.setGravity(Gravity.LEFT | Gravity.CENTER);

    mValue.setTextSize(16);
    mValue.setPadding(5, 3, 0, 3);
    mValue.setTypeface(null, Typeface.ITALIC);
    mValue.setGravity(Gravity.LEFT | Gravity.CENTER);

    mType.setText("111");
    mValue.setText("111");

    childLayout.addView(mValue, 0);
    childLayout.addView(mType, 0);

    linear.addView(childLayout);
}
19
vaibhav jain

Utilisez quelque chose de similaire pour ajouter TextView à LinearLayout de manière dynamique:

LinearLayout linearLayout = getActivity().findViewById(R.id.infoLayout);

TextView valueTV = new TextView(context);
valueTV.setText("hallo hallo");
valueTV.setId(Integer.parseInt("5"));
valueTV.setLayoutParams(new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.FILL_PARENT,
       LinearLayout.LayoutParams.WRAP_CONTENT));

linearLayout.addView(valueTV);

getActivity () est utilisé pour l'intérieur de Fragments, vous pouvez utiliser un contexte ou quelque chose de similaire pour chaque instance dans laquelle vous vous trouvez.

7
Noir

Vous devez accéder à la présentation via sa ressource de présentation, et non pas une ressource id qui n'est pas garantie unique. La référence de ressource devrait ressembler à R.layout.my_cool_layout où votre mise en page XML ci-dessus est stockée dans res/layout/my_cool_layout.xml.

3
penguin359
LinearLayout.LayoutParams layoutParams ;
layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
0
Zapnologica