Hinzufügen von Komponenten zu einem Layout über JAVA in Android
-
21-12-2019 - |
Frage
Tatsächlich ist das Hauptlayout ein relatives Layout, in dem Praktikanten ein relatives Layout enthalten.Das Hauptziel besteht darin, dem inneren relativen Layout Bilder hinzuzufügen.
Ich habe das ausprobiert, aber es ist mir nicht gelungen.Das ist mein Code :
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.app.Activity;
import android.graphics.Point;
public class MainActivity extends Activity {
Display display;
Point point;
int width;
int height;
Animation up, down, right, left;
RelativeLayout rl, rl2;
Integer[] pics = { R.drawable.img1, R.drawable.img2,R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6,R.drawable.img7, R.drawable.img8,
R.drawable.img9, R.drawable.img10,R.drawable.img11, R.drawable.img12,
R.drawable.img13, R.drawable.img14,R.drawable.img15};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Init();
}
private void Init() {
// TODO Auto-generated method stub
rl = (RelativeLayout) findViewById(R.id.Rlayout);
rl.setGravity(Gravity.CENTER);
int x = 0;
int y = 0;
for(int i = 1 ; i<16 ; i++ ){
ImageView img = new ImageView(this);
img.setImageResource(pics[i-1]);
int tempx = img.getWidth();
int tempy = img.getHeight();
rl.addView(img, x, y);
x += tempx;
if(i%4 == 0){
x = 0;
y += tempy;
}
}
rl.bringToFront();
}
}
Der XML-Code für das verwendete Layout lautet :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/R1Layout">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:gravity="center"
android:id="@+id/Rlayout" >
</RelativeLayout>
</RelativeLayout>
Die Ausgabe, die ich bekomme, ist ein leerer Bildschirm.
Helfen Sie mir mit einer Lösung, wie die Bilder im inneren relativen Layout angezeigt werden
Danke im Voraus ,
Lösung
Ich denke, Sie missverstehen, x und y sind nicht die Koordinaten, sind Breite bzw. Höhe in
rl.addView(img, x, y);
und Sie können die Größe der Bildansichten nicht mit bekommen:
int tempx = img.getWidth();
int tempy = img.getHeight();
Sie müssen einen Container verwenden, um Größe und Koordinaten für Ihre Bildansichten festzulegen:
RelativeLayout.LayoutParams params;
params = new RelativeLayout.LayoutParams(100, 100);
params.leftMargin = x;
params.topMargin = y;
rl.addView(img,params);
dies ist ein Beispiel dafür, wie es geht:
private void Init() {
// TODO Auto-generated method stub
int x = 0;
int y = 0;
rl = (RelativeLayout) findViewById(R.id.Rlayout);
rl.setGravity(Gravity.CENTER);
for(int i = 0 ; i<14 ; i++ ){
ImageView img = new ImageView(this);
img.setImageResource(pics[i]);
//int tempx = img.getWidth();
//int tempy = img.getHeight();
int tempx = 100;
int tempy = 100;
//rl.addView(img, x, y);
x += tempx;
if(i%4 == 0){
x = 0;
y += tempy;
}
RelativeLayout.LayoutParams params;
params = new RelativeLayout.LayoutParams(100, 100);
params.leftMargin = x;
params.topMargin = y;
rl.addView(img,params);
}
rl.bringToFront();
}
wie Rajesh empfehle ich auch die Verwendung eines Gridview
statt RelativeLayout
.
Siehe dieses Beispiel:
Rasteransicht und übermäßiger Platzbedarf
Andere Tipps
Um Bilder in das innere Relativelayout einzufügen, müssen Sie das ImageView-Objekt verwenden.Sie können es mit der AddView () -Methode ausführen, die Relativivelayout (durch Erbschaft von der ViewGroup-Klasse) zur Verfügung steht.Sie können es in Ihrer Tätigkeit wie folgt tun (Sie müssen entscheiden, wo Sie dies platzieren möchten):
generasacodicetagpre.