سؤال

أحاول إضافة طرق عرض ديناميكية إلى LinearLayout. أرى من خلال getChildCount () أن المشاهدات تتم إضافة إلى التصميم ، ولكن حتى الاتصال ببطل () على التصميم لا يعطيني ظهور الأطفال.

هل فاتني شيء؟

هل كانت مفيدة؟

المحلول

بضعة أشياء يمكنك التحقق منها في الرمز الخاص بك:

  • على ال رأي تتم إضافة ذلك ، تحقق من الاتصال به setlayoutparameter الطريقة مع مناسبة ViewGroup.LayoutParameter.
  • عند إضافة الجديد رأيS ، تأكد من قيامك بذلك على موضوع واجهة المستخدم. للقيام بذلك ، يمكنك استخدام الوالد رأيبريد طريقة.

يضيف هذا المثال المحتوى ذاتيًا عرض النص بعد تأخير قصير عندما يبدأ:

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ProgrammticView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final LinearLayout layout = new LinearLayout(this);
        layout.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT));

        setContentView(layout);

        // This is just going to programatically add a view after a short delay.
        Timer timing = new Timer();
        timing.schedule(new TimerTask() {

            @Override
            public void run() {
                final TextView child = new TextView(ProgrammticView.this);
                child.setText("Hello World!");
                child.setLayoutParams(new ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.FILL_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));

                // When adding another view, make sure you do it on the UI
                // thread.
                layout.post(new Runnable() {

                    public void run() {
                        layout.addView(child);
                    }
                });
            }
        }, 5000);
    }
}

نصائح أخرى

واجهت نفس المشكلة ولاحظت أن طريقة التجاوز الخاصة بي () لم يتم استدعاؤها بعد الإبطال. لذلك قمت بإنشاء روتين فرعي خاص بي في LinearLayout ودعاها قبل طريقة Pervilated ().

فيما يلي رمز LinearLayout العمودي:

private void measure() {
    if (this.getOrientation() == LinearLayout.VERTICAL) {
        int h = 0;
        int w = 0;
        this.measureChildren(0, 0);
        for (int i = 0; i < this.getChildCount(); i++) {
            View v = this.getChildAt(i);
            h += v.getMeasuredHeight();
            w = (w < v.getMeasuredWidth()) ? v.getMeasuredWidth() : w;
        }
        height = (h < height) ? height : h;
        width = (w < width) ? width : w;
    }
    this.setMeasuredDimension(width, height);
}

قضيت الكثير من الوقت لحل هذه المشكلة أيضًا. ووجدت طريقة بسيطة لتحديث LinearLayout في 3 أسطر من التعليمات البرمجية

يجب عليك ضبط اللون عبر الأناقة. xml

<color name="transparent">#00000000</color>

وفي الكود فقط اتصل لتعيين الخلفية

LinearLayout ll = (LinearLayout) findViewById(R.id.noteList);
ll.setBackgroundColor(getResources().getColor(R.color.transparent));
ll.invalidate();

إذا كان لديك مكالمة خلفية قابلة للرسم

ll.setBackgroundResource(R.drawable.your_drawable);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top