Создание макета программно в android-выпуске
Я создаю 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_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal" >
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</WebView>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="invisible" />
<ImageView
android:id="@+id/splashscreen"
android:layout_width="match_parent"
android:layout_height="match_parent"
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, каждый из них перекрывается.
2 ответов
Разработчик Android-Документация По Компоновке Кадров гласит:
как правило, FrameLayout должен использоваться для хранения одного дочернего представления, потому что может быть трудно организовать дочерние представления таким образом, чтобы масштабироваться до разных размеров экрана без перекрытия детей друг друга. Однако вы можете добавить несколько дочерних элементов в FrameLayout и управлять их положением в FrameLayout, назначая гравитацию каждому ребенку, используя android:layout_gravity
атрибут.
в вашем случае, вы можете использовать layout.setForegroundGravity(int)
то же самое.
добавить
layout.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
или
layout.setGravity(Gravity.CENTER);
вы забыли установить гравитацию макета.