Добавление ImageView
Хочу добавить 2 ImageView, именно программным способом, таким образом, чтобы один был под другим. Но при добавлении элемента point он перекрывает объект ball, a не наоборот. Подскажите пожалуйста, в чем проблема?
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainlayout"
/>
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge">
</TextView>
</RelativeLayout>
Main Activity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainlayout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //блокировка ориентации
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //не гасить экран
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // Получаем менеджер сенсоров
mAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); // Получаем датчик ускорения
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
dpBallHeight = (int) dpHeight - 50;
dpBallWidth = (int) dpWidth - 50;
// Добавляем ImageView Point
point = new ImageView(MainActivity.this);
point.setImageResource(R.drawable.point);
LinearLayout.LayoutParams pointLayoutParams = new LinearLayout.LayoutParams(150, 150);
pointLayoutParams.setMargins(dpBallWidth, dpBallHeight,0,0);
point.setLayoutParams(pointLayoutParams);
// Добавляем ImageView Ball
ball = new ImageView(MainActivity.this);
ball.setImageResource(R.drawable.sphere);
LinearLayout.LayoutParams ballLayoutParams = new LinearLayout.LayoutParams(100, 100);
ballLayoutParams.setMargins(dpBallWidth, dpBallHeight,0,0);
ball.setLayoutParams(ballLayoutParams);
mainLayout.addView(point);
mainLayout.addView(ball);
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Я думаю можно перед добавлением в макет виджетов добавить предварительно какой-то LinearLayout или другой контейнер, куда потом положить ваши виджеты. Добавить программно контейнер можно так:
LinearLayout parent = new LinearLayout(context);
parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
parent.setOrientation(LinearLayout.HORIZONTAL);
//children of parent linearlayout
ImageView iv = new ImageView(context);
LinearLayout layout2 = new LinearLayout(context);
layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);
parent.addView(iv);
parent.addView(layout2);
//children of layout2 LinearLayout
TextView tv1 = new TextView(context);
TextView tv2 = new TextView(context);
TextView tv3 = new TextView(context);
TextView tv4 = new TextView(context);
layout2.addView(tv1);
layout2.addView(tv2);
layout2.addView(tv3);
layout2.addView(tv4);
Это пример выше, в вашем случае нужно определить ориентацию контейнера, если вы его будете использовать, и заполнить виджетами. Так же можно использовать RalativeLayout:
// Creating a new RelativeLayout
RelativeLayout relativeLayout = new RelativeLayout(this);
// Defining the RelativeLayout layout parameters.
// In this case I want to fill its parent
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.FILL_PARENT);
// Creating a new TextView
TextView tv = new TextView(this);
tv.setText("Test");
// Defining the layout parameters of the TextView
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
// Setting the parameters on the TextView
tv.setLayoutParams(lp);
// Adding the TextView to the RelativeLayout as a child
relativeLayout.addView(tv);
// Setting the RelativeLayout as our content view
setContentView(relativeLayout, rlp);
вот тут подобный вопрос есть.