Программно добавить ImageView в макет - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь добавить связку ImageView в свой пользовательский интерфейс с помощью цикла, проблема в том, что я понятия не имею, добавляется ли ImageView или нет, потому что когда я запускаю приложение, оно просто дает мне пустой белый экран,

for(int i = 0; i < jsonArray.length(); i++) {
                Log.d("test", "ok"); //the loop works btw
                poster.setId(i);
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                ImageView poster = new ImageView(getApplicationContext());
                poster.setBackgroundResource(R.drawable.myPoster);


                RelativeLayout.LayoutParams posterParams = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT
                );
                posterParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
                posterParams.addRule(RelativeLayout.CENTER_VERTICAL);
                posterParams.width = 160; //is this DP?
                posterParams.height = 220;
                relativeLayout.addView(poster, posterParams);

            }

Любые предложения приветствуются.

РЕДАКТИРОВАТЬ

Я добавил еще один фрагмент кода, чтобы проверить, будет ли виджет добавляться без использованияцикл:

  //test
  LinearLayout layout = new LinearLayout(this);
  Button btn = new Button(this);
  btn.setText("this is a button");
  btn.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
  layout.addView(btn);

И я все еще получаю тот же результат, только пустой.

Ответы [ 2 ]

1 голос
/ 14 июня 2019
  • Прежде всего, вы даете один и тот же параметр каждому ImageView, поэтому все ваши ImageView лежат на Like STACK, только последний из них будет виден вам.Вы можете использовать ScrollView, чтобы увидеть, действительно ли ImageView s добавлено к вашему корневому макету

  • Во-вторых, установите параметры макета для ваших динамических ImageView не ваших корневых макетов.

Обновление

Как использовать ScrollView,

Прежде всего, ваш XML должен содержать ScollView иchild (LinearLayout в нашем случае, но вы можете выбрать любой макет в зависимости от вашего варианта использования) для размещения вашего ImageView

    <ScrollView>
      <LinearLayout
       android:id = "imageViewPlaceHolder">

      </LinearLayout>
    </ScrollView>

Во-вторых, в вашем Java-коде вы должны найти внутренний макет для добавлениявыглядит следующим образом

LinearLayout placeHolder = findViewById(R.id.imageViewPlaceHolder);

Затем вы готовы добавить ImageViews в placeHolder, поскольку ваш placeHolder, обернутый ScrollView, будет динамически создавать прокрутку, если высота содержимого выходит за пределы выделенной высоты.

placeHolder.addView(yourImageView);

Добавление всего из Java

HorizontalScrollView hsv = new HorizontalScrollView(context);
hsv.setLayoutParams(yourLayoutParams);

LinearLayout myPlaceHolder = new LinearLayout(context);
myPlaceHolder.setLayoutParams(yourLayoutParamsForLinearLayout);

myPlaceHolder.addView(yourDesiredImageView);

hsv.addView(myPlaceHolder);

yourRootLayout.addView(hsv);

Надеюсь, что это имеет смысл, не стесняйтесь спрашивать любые разъяснения

0 голосов
/ 14 июня 2019

попробуйте это:

listView = (ListView) findViewById(R.id.lv_info);
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, text);

listView.addHeaderView(creatHeader(getString(R.string.abuot_email),getResources().getString(R.string.email_info)));
listView.addHeaderView(creatHeader(getString(R.string.about_phone),getResources().getString(R.string.admin_phone_num)));
listView.addHeaderView(creatHeader(getString(R.string.about_copyright), getResources().getString(R.string.copyright_info)));
listView.addHeaderView(creatHeader(getString(R.string.about_version),getResources().getString(R.string.version_info)));

listView.setAdapter(adapter);

Метод creatHeader:

public View creatHeader(String title, String text) {
    View v = getLayoutInflater().inflate(R.layout.lv_item_header_info, null);
    ((TextView) v.findViewById(R.id.tvTitle)).setText(title);
    ((TextView) v.findViewById(R.id.tvText)).setText(text);
    return v;
}

Файл макета для предметов:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ssss"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:gravity="center_vertical"/>


    <TextView
        android:id="@+id/tvText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="sssssssss"
        android:gravity="center_vertical"/>

</LinearLayout>
...