Turkcell | Geleceği Yazanlar

Kod ile Düzenli Textview oluşturma

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();
                }
            });
        }

 

    0

    burak

    09 Ağustos 2017

     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;
        }

     

    0

    Oğuzhan Yiğit

    04 Ağustos 2017

    
    
            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

      b.gulmez

      Cmt, 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ğuzhanyiğit

      7, 06/08/2017 - 01:54
      kodu güncelledim, bir daha dene bakalım

      b.gulmez

      7, 06/08/2017 - 20: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.
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.