Soru & Cevap

Kod ile Düzenli Textview oluşturma

04.08.2017 - 04:56

Merhaba

Metini kelimelere ayırarak her bir kelimeyi farklı textviewlere yazdırmak istiyorum. textview leri kod ile oluşturup içine yazıları yazdırdım ancak tüm textviewleri yan yana oluşuturuyor belli bi yerden sonra alta geçerek oluşturmasını istiyorum bunun için ne yapmalıyım ?
Teşekkürler

Kod şu şekilde 

 LinearLayout linearLayout = new LinearLayout(this);
        setContentView(linearLayout);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        ViewGroup.LayoutParams params = linearLayout.getLayoutParams();
        params.height = ViewGroup.LayoutParams.MATCH_PARENT;
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        linearLayout.setLayoutParams(params);
        linearLayout.setGravity(Gravity.LEFT);
        
        for( int i = 0; i < stringTokenizer.countTokens(); i++ )
        {
            final TextView textView = new TextView(this);
            textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            textView.setTextSize(16);
            textView.setPadding(5,5,5,5);
            textView.setText(stringTokenizer.nextToken().toString());
            linearLayout.addView(textView);

            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getApplicationContext(),textView.getText().toString(),Toast.LENGTH_LONG).show();
                }
            });
        }

 

325 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user b.gulmez
b.gulmez
09.08.2017 - 02:49

 Aşağıdaki şekilde çalıştırdım ihtiyacı olan olursa kullanır. Yardımları için oğuzhanyigit e teşekkürler. 

Hatanın nedeni de galiba bir main linear layout olup içine child leri yerleştirmem gerekiyormuş. yani şu şekilde olduğunda

  • linearlayout 
    • linearlayout
      • textviews
    • linearlayout
      • textviews

çalışıyor

arada bir tane daha  layout olunca 

  • layout yada scrollview
    • linearlayout 
      • linearlayout
        • textviews
      • linearlayout
        • textviews

yani bu şekilde olunca aşağıdaki hatayı veriyor

 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

bunun çözümünü bulamadım malesef. Ben ScrollView eklemeye çalışıyorum ancak ekleyemedim. Çözümü bilen varsa yardımcı olursa sevinirim Teşekkürler

 public void drawer() {
        String[] kelime=s.split(" ");

        mainlinearLayout = (LinearLayout) findViewById(R.id.LinLay);
        childLinearLayout = getLinearLayout();


        for (int i = 1; i < kelime.length; i++) {
            final TextView textView = new TextView(this);
            textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            textView.setTextSize(16);
            textView.setPadding(5, 5, 5, 5);
            textView.setText(kelime[i-1].toString());
            childLinearLayout.addView(textView);

            if (i % separatorNum == 0 && i != 0) {
                mainlinearLayout.addView(childLinearLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                setContentView(mainlinearLayout);
                childLinearLayout=getLinearLayout();
            }

            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getApplicationContext(), textView.getText().toString(), Toast.LENGTH_LONG).show();
                }
            });
        }

    }
    public LinearLayout getLinearLayout() {
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        linearLayout.setLayoutParams(params);
        return linearLayout;
    }

 

picture-61684-1501749567.jpg
oğuzhanyiğit
04.08.2017 - 10:57


        public static final int separatorNum = 3; // tek satırda 3 tane textview hizalar
        LinearLayout mainLinearLAyout = getLinearLayout(true);
        setContentView(mainLinearLAyout);

        LinearLayout childLinearLayout = getLinearLayout(false);

        for( int i = 0; i < stringTokenizer.countTokens(); i++ ) {
            final TextView textView = new TextView(this);
            textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            textView.setTextSize(16);
            textView.setPadding(5,5,5,5);
            textView.setText(stringTokenizer.nextToken().toString());

            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getApplicationContext(),textView.getText().toString(),Toast.LENGTH_LONG).show();
                }
            });
            if (i % separatorNum == 0 && i != 0) {
                mainLinearLAyout.addView(childLinearLayout);
                childLinearLayout = getLinearLayout(false);
            }
            childLinearLayout.addView(textView);
        }
        if (childLinearLayout.getChildCount() > 0) {
            mainLinearLAyout.addView(childLinearLayout);
        }
    
    public LinearLayout getLinearLayout(boolean isMainLayout) {
        LinearLayout linearLayout = new LinearLayout(this);
        if (isMainLayout) {
            linearLayout.setOrientation(LinearLayout.VERTICAL);
            linearLayout.setGravity(Gravity.TOP);
        } else {
            linearLayout.setOrientation(LinearLayout.HORIZONTAL);
            linearLayout.setGravity(Gravity.START);
        }
        ViewGroup.LayoutParams params = linearLayout.getLayoutParams();
        params.height = ViewGroup.LayoutParams.MATCH_PARENT;
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        linearLayout.setLayoutParams(params);
        return linearLayout;
    }

Sanırım bu işini görür, kolay gelsin

burak
05.08.2017 - 01:41
yardımınız için teşekkürler öncelikle ancak bir hata aldım hatayı çok fazla gözden geçiremedim ama sanırsam child parent sorunu paylaştığınız kodun 22. satırında veriyor Hata şu java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Oğuzhan Yiğit
06.08.2017 - 01:54
kodu güncelledim, bir daha dene bakalım
burak
06.08.2017 - 08:12
denedim ama yine çalılşmadı getLinearLayout ta setContentView(linearLayout); kaldırmışsın galiba o yuzden params.height de şu hatayı veriyor java.lang.NullPointerException: Attempt to write to field 'int android.view.ViewGroup$LayoutParams.height' on a null object reference setContentView(linearLayout); koyunca da bi önceki hatayı yine veriyor.