Adicionar componentes a um layout através do JAVA no android
-
21-12-2019 - |
Pergunta
Na verdade, o layout principal é um parente de layout que os estagiários contém um parente layout nele.O principal objetivo é adicionar imagens para o interior em relação ao layout .
Eu tentei isso, mas não tive sucesso .Este é o meu código :
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();
}
}
O código XML para o layout a ser utilizado é :
<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>
A saída que eu vejo é uma tela em branco .
Me ajudar com uma solução de como exibir as imagens no interior relativo de layout
Obrigado antecipadamente ,
Solução
Eu acho que você está mal-entendido, x e y não são as coordenadas, são largura e altura, respectivamente, em
rl.addView(img, x, y);
e você não puder obter o tamanho do imageviews com:
int tempx = img.getWidth();
int tempy = img.getHeight();
Você deve usar um recipiente para definir o tamanho e as coordenadas para o seu imageviews:
RelativeLayout.LayoutParams params;
params = new RelativeLayout.LayoutParams(100, 100);
params.leftMargin = x;
params.topMargin = y;
rl.addView(img,params);
este é um exemplo de como fazer isso:
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();
}
como Rajesh, eu recomendo muito o uso de um Gridview
em vez de RelativeLayout
.
Veja este exemplo:
GridView e excesso de espaço de preenchimento
Outras dicas
Para inserir imagens no interior RelativeLayout, você precisa usar Imagemver objeto.Você pode fazer isso usando o addView() método que está disponível para RelativeLayout (através de herança de ViewGroup classe).Você pode fazer isso da seguinte forma, dentro de sua atividade (você tem que decidir onde você deseja colocar este):
RelativeLayout rl = (RelativeLayout) findViewById(R.id.Rlayout); // find inner layout
ImageView iview = new Image(this);
// Set image view parameters - refer to Android documentation for this
rl.addView(iview); // and so on.
// You can add as many items as you want to any layout you want in this manner