我有一个用XML定义的布局。它还包括:
<RelativeLayout
android:id="@+id/item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
我想用其他XML布局文件来膨胀这个RelativeView。我可能会根据情况使用不同的布局。我该怎么做呢?我尝试了不同的变化
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
但没有一个运行良好。
如果你想多次添加一个视图,那么你必须使用
layoutInflaterForButton = getActivity().getLayoutInflater();
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
btnContainer.addView(btnView);
}
如果你喜欢
layoutInflaterForButton = getActivity().getLayoutInflater();
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
and
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
btnContainer.addView(btnView);
}
然后它将抛出所有已添加视图的异常。
由于我的特殊情况,我在这个错误上经历了最艰难的一段时间,但最终找到了解决方案。
我的情况:我使用一个单独的视图(XML),它持有一个WebView,然后在一个AlertDialog中打开当我点击一个按钮在我的主活动视图。但不知何故,WebView属于主活动视图(可能是因为我从这里拉资源),所以在我分配给我的AlertDialog(作为一个视图),我必须得到我的WebView的父,把它放入一个ViewGroup,然后删除该ViewGroup上的所有视图。这招奏效了,我的错误也消失了。
// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);
// more code...
.... 稍后,在我加载我的WebView ....
// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();
// put WebView in Dialog box
alert.setView(webView);
alert.show();
attachtorroot设置为True
假设我们在XML布局文件中指定了一个按钮,将其布局宽度和布局高度设置为match_parent。
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>
在此按钮上单击事件,我们可以设置以下代码来膨胀此活动的布局。
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);
希望这个方法对你有用。
试试下面的代码:
如果你只是想扩大你的布局:
View View = LayoutInflater.from(context). inflation (r.b ayout.your_xml_layout,null);//扩展xml布局的代码
RelativeLayout item = view.findViewById(R.id.item);
如果你想在容器中膨胀布局(父布局):
LinearLayout父= findViewById(R.id.container);/ /父布局。
View View = LayoutInflater.from(context). inflation (r.b ayout.your_xml_layout,parent,false);
RelativeLayout item = view.findViewById(R.id.item);//初始化布局&通过这个你也可以执行任何事件。
parent.addView(查看);//在父布局中添加膨胀布局。
当在Kotlin中添加一个布局到一个Activity时,请参见以下步骤:
只添加在活动-一个布局作为父
new的Xml文件
给出R的值。
val parent: LinearLayout =findViewById(R.id.stars)
Val view =
LayoutInflater.from (applicationContext) .inflate (R.layout.another,家长,假)
如果父项不需要,可以为空,但是会出现警告信息
view.findViewById<ImageView>(R.id.ivTimer).setImageResource(R.drawable.t2)
任何视图都必须以这种方式设置值,最后添加
parent.apply { addView(view)}