作为一个背景知识 - 我为位于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'所属的布局不是设置为内容视图。
答案 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);
希望这有帮助!