将布局视图从xml文件添加到内容视图

时间:2014-08-07 14:15:46

标签: java android android-layout android-view

作为一个背景知识 - 我为位于GLSurfaceview顶部的用户界面创建了一个布局。随着我的进步,我想在GLSurfaceview上添加来自admob的广告。经过一些阅读后,似乎唯一的方法是创建一个新的布局视图,然后将每个动态创建的视图添加到此。然后将新的“布局”视图设置为内容视图。这意味着我的UI中的所有视图都是在java代码中动态创建的。

我的问题是:

有没有办法可以使用未设置为内容视图的xml布局中的视图,并以某种方式将其添加到内容视图中,就像动态创建视图一样?

我确实尝试了这个,但得到了空指针异常,从中我试图查看ViewById。

任何形式的解释都会有所帮助

编辑添加了代码

@Override
public void onCreate(Bundle savedInstanceState)
{       
    super.onCreate(savedInstanceState);

    // Create an ad.
    adView = new AdView(this);
    adView.setAdSize(AdSize.SMART_BANNER);
    adView.setAdUnitId(AD_UNIT_ID);


    RelativeLayout layout = new RelativeLayout(this);
    layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,    LayoutParams.MATCH_PARENT));


    AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice("******************************").build();

    adView.loadAd(adRequest);

    RelativeLayout.LayoutParams adParams = 
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);



    final TextView Score = new TextView(this);
    Score.setText(" 0");
    RelativeLayout.LayoutParams scoreParams = new 
    RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    Score.setLayoutParams(scoreParams);
    Typeface tf = Typeface.createFromAsset(getAssets(),"Fonts/BOYCOTT_.ttf");       
    Score.setTextSize(getResources().getDimension(R.dimen.textsize));
    Score.setTypeface(tf);
    Score.setTextColor(0xFFFFFFFF);     

    // Check if the system supports OpenGL ES 2.0.
    final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
    final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;

    if (supportsEs2)
    {

        // Request an OpenGL ES 2.0 compatible context.
        mGLSurfaceView = new RBGLSurfaceView(this); new GLSurfaceView(this);
        mGLSurfaceView.setEGLContextClientVersion(2);           
        final DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);          

        mGoogleApiClient = getApiClient();
        mGLSurfaceView.setRenderer(new RBRenderer(this, Score, mGoogleApiClient),displayMetrics);

        layout.addView(mGLSurfaceView);
        layout.addView(Score, scoreParams);
        layout.addView(adView, adParams);
        //Set main renderer             
        setContentView(layout);

    }
    else
    {
        // This is where you could create an OpenGL ES 1.x compatible
        // renderer if you wanted to support both ES 1 and ES 2.
        return;
    }   

}   

好的,所以上面的代码创建了一个adview,textview和surface视图,并将它们添加到布局中,然后将其设置为contentview - 效果很好。 但是,即使此xml布局未设置为内容视图,是否可以从xml布局添加文本视图?

这样做不起作用

 final TextView test= (TextView) findViewById(R.id.test);
 // set properties here etc
 layout.adView(test);

因为'test'为null,因为视图'test'所属的布局不是设置为内容视图。

1 个答案:

答案 0 :(得分:1)

  

是否可以从xml布局添加文本视图,即使此xml布局未设置为contentview?

是的,它完全有可能!试试这个:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(this.LAYOUT_INFLATER_SERVICE);
View textView = inflater.inflate(R.layout.text_view, null);
layout.addView(textView);

希望这有帮助!