在FrameLayout的相对布局中创建和添加动态视图 [英] Creating and Adding dynamic views in Relative layout inside FrameLayout

查看:939
本文介绍了在FrameLayout的相对布局中创建和添加动态视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做的事情是这样的

What I'm doing is something like this

<Dynamic Framelayout >
    <Dynamic Relaive Layout>

       <Dynamic imageView>
       <Dynamic TextView>

    </Dynamic Relaive Layout>
</Dynamic Framelayout>

如上所述,我已经创建了布局并放置了视图.

I have created the layout and placed the views as I discussed above.

但是现在我想将textview放置在图像视图下方

But Now I want to textview should be placed below the image view

这就是我要得到的.

注意红色文本视图.它应该在imageview下方并水平居中.

notice the RED textviews. this should be below the imageview and horizontally centered.

这是我的代码.

final FrameLayout main = (FrameLayout) findViewById(R.id.add_dynamic_views_frame);
int numViews = drawbbleIds.length;
for (int i = 0; i < numViews; i++) {

    RelativeLayout rel_inner = new RelativeLayout(SplashSearch.this);

    rel_inner.setGravity(Gravity.CENTER_HORIZONTAL);

    ImageView imgView = new ImageView(SplashSearch.this);

    TextView textView = new TextView(SplashSearch.this);

    imgView.setImageDrawable(getResources().getDrawable(drawbbleIds[i]));

    imgView.setTag(i);
    imgView.setId(i);
    imgView.setOnClickListener(SplashSearch.this);

    rel_inner.addView(imgView);

    RelativeLayout.LayoutParams imgLp = (RelativeLayout.LayoutParams) imgView
            .getLayoutParams();

    textView.setTag(i);
    textView.setId(i);

    textView.setText(getResources().getStringArray(R.array.tabs_names)[i]);

    textView.setTextColor(Color.RED);

    rel_inner.addView(textView);

    RelativeLayout.LayoutParams txtLp = (RelativeLayout.LayoutParams) textView
            .getLayoutParams();

    imgLp.addRule(RelativeLayout.BELOW, textView.getId());

    textView.setLayoutParams(imgLp);

    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(70, 70);

    // Place all views in the center of the
    // layout. We'll transform them
    // away from there in the code below.
    lp.gravity = Gravity.CENTER;

    // Set layout params on view.
    rel_inner.setLayoutParams(lp);

    // Calculate the angle of the current
    // view.
    // Adjust by 90 degrees to
    // get View 0 at the top. We need the
    // angle
    // in degrees and radians.
    float angleDeg = i * 360.0f / numViews - 90.0f;
    float angleRad = (float) (angleDeg * Math.PI / 180.0f);

    rel_inner.setTranslationX(250 * (float) Math.cos(angleRad));
    rel_inner.setTranslationY(250 * (float) Math.sin(angleRad));

    main.addView(rel_inner);
}

推荐答案

尝试使用此代码:

 final FrameLayout main = (FrameLayout) findViewById(R.id.frame);
            int numViews = 5;
            for (int i = 0; i < numViews; i++) {

                RelativeLayout rel_inner = new RelativeLayout(this);

                rel_inner.setGravity(Gravity.CENTER_HORIZONTAL);

                ImageView imgView = new ImageView(this);

                imgView.setImageDrawable(getResources().getDrawable(
                        R.drawable.ic_launcher));

                imgView.setTag(i);
                imgView.setId(i + 1);
                // imgView.setOnClickListener(SplashSearch.this);

                rel_inner.addView(imgView);

                RelativeLayout.LayoutParams imgLp = new RelativeLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

                TextView textView = new TextView(this);
                textView.setTag(i);
                textView.setId(i);
                textView.setText("" + i);

                textView.setTextColor(Color.RED);
                imgLp.addRule(RelativeLayout.BELOW, imgView.getId());
imgLp.addRule(RelativeLayout.CENTER_HORIZONTAL);
                textView.setLayoutParams(imgLp);

                rel_inner.addView(textView);

                FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(70,
                        LayoutParams.WRAP_CONTENT);

                // Place all views in the center of the
                // layout. We'll transform them
                // away from there in the code below.
                lp.gravity = Gravity.CENTER;

                // Set layout params on view.
                rel_inner.setLayoutParams(lp);

                // Calculate the angle of the current
                // view.
                // Adjust by 90 degrees to
                // get View 0 at the top. We need the
                // angle
                // in degrees and radians.
                float angleDeg = i * 360.0f / numViews - 90.0f;
                float angleRad = (float) (angleDeg * Math.PI / 180.0f);

                rel_inner.setTranslationX(250 * (float) Math.cos(angleRad));
                rel_inner.setTranslationY(250 * (float) Math.sin(angleRad));

                main.addView(rel_inner);
            }

效果很好.希望对您有帮助.

It works well.Hope it will help you.

这篇关于在FrameLayout的相对布局中创建和添加动态视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆