在android中以编程方式创建布局 - 问题
Posted
技术标签:
【中文标题】在android中以编程方式创建布局 - 问题【英文标题】:Create Layout Programmatically in android - issue 【发布时间】:2012-08-07 11:16:15 【问题描述】:我正在使用以下代码动态创建 FrameLayout
mylayout.java
FrameLayout layout = new FrameLayout(this);
FrameLayout.LayoutParams layoutparams=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT,Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
layout.setLayoutParams(layoutparams);
webview=new WebView(this);
webview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
splashview=new ImageView(this);
splashview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
splashview.setScaleType(ScaleType.FIT_XY);
splashview.setImageResource(R.drawable.splash);
splashview.setVisibility(View.INVISIBLE);
progressbar=new ProgressBar(this);
FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT,Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
progressbar.setLayoutParams(params);
progressbar.setVisibility(View.INVISIBLE);
layout.addView(webview);
layout.addView(progressbar);
layout.addView(splashview);
setContentView(layout);
mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal" >
<WebView
android:id="@+id/webview"
android:layout_
android:layout_ >
</WebView>
<ProgressBar
android:id="@+id/progressBar"
android:layout_
android:layout_
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="invisible" />
<ImageView
android:id="@+id/splashscreen"
android:layout_
android:layout_
android:contentDescription="@string/myimg"
android:scaleType="fitXY"
android:src="@drawable/splash"
android:visibility="invisible" />
</FrameLayout>
我需要equalent code for the above xml file in java
。我做错了什么?
注意:使用上面的java代码,每一个都是重叠的。
【问题讨论】:
我犯了什么错误? -- 你发现了什么错误? 【参考方案1】:Android Developer - Frame Layout Documentation 读作:
一般来说,应该使用 FrameLayout 来保存单个子视图,因为很难以一种可缩放到不同屏幕尺寸的方式组织子视图,而不会使子视图相互重叠。但是,您可以使用android:layout_gravity
属性将多个子项添加到 FrameLayout 并通过为每个子项分配重力来控制它们在 FrameLayout 中的位置。
在您的情况下,您可以使用 layout.setForegroundGravity(int)
来实现相同的目的。
【讨论】:
【参考方案2】:添加
layout.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
或
layout.setGravity(Gravity.CENTER);
您忘记设置布局的重力。
【讨论】:
如果我使用上面的代码进行框架布局,显示错误为“未定义的方法” 是的,你是对的....但是方法是setForgroundGravity。无论如何谢谢。放弃投票以上是关于在android中以编程方式创建布局 - 问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中以编程方式创建带有自定义列表项的 ListView - 没有 xml 列表项布局
约束布局中以编程方式添加的按钮将忽略约束 - Android
使用 RemoteView 删除 Widget 中以编程方式生成的布局