Добавление изображения с помощью code Android Studio

#java #android-studio

#java #android-studio

Вопрос:

У меня проблема в том, что я не могу узнать, как добавить какой-либо компонент (в данном случае imageview)

Это XML-код для макета

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".main.Main">
    <LinearLayout
        android:id="@ id/container"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:ignore="MissingConstraints" />
    <ImageView
        android:id="@ id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="56dp"
        android:layout_marginLeft="56dp"
        android:layout_marginTop="40dp"
        android:contentDescription="@string/Nada"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_launcher_foreground" />
</androidx.constraintlayout.widget.ConstraintLayout>
  

И это код, который я до сих пор пытался добавить в представление изображения

 package com.example.servidorexample.main;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class Main extends AppCompatActivity implements Observer{


    @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ImageView imageView_ = findViewById(R.id.imageView);
         //Im thinking something like this:
         findViewById(R.id.container).add(imageView_);
         //
    }
}
  

И, наконец, вот тот, который называется AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.serverexample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".main.Main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  

Это просто так, stackoverflow позвольте мне опубликовать это редактирование, потому что в нем говорится, что в нем так много кода и не так много деталей
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ответ №1:

Поскольку вы упомянули, что вам нужен imageview, заполненный программно, вот как вы можете подойти к этому:

  1. Создайте новый файл макета (например, для template_imageview.xml )
 <?xml version="1.0" encoding="utf-8"?>
<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="56dp"
    android:layout_marginLeft="56dp"
    android:layout_marginTop="40dp"
    android:contentDescription="@string/Nada"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/ic_launcher_foreground" />
  

Обратите внимание, что я изменил один из ваших атрибутов с fill_parent на match_parent.

  1. Теперь раздуйте и добавьте представление изображения с помощью кода:
 package com.example.servidorexample.main;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class Main extends AppCompatActivity implements Observer {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout containerLayout = findViewById(R.id.container);

        // Inflate the imageview, giving the linearlayout as the parent)
        ImageView imageView_ = (ImageView) getLayoutInflater().inflate(R.layout.template_imageview, containerLayout, false);

        // Add the imageView to the linearlayout
        containerLayout.addView(imageView);
    }
}
  

То, как вы пытаетесь сделать это программно, не сработает, поскольку ImageView уже имеет родительский макет (ConstraintLayout), и вы получите исключение во время выполнения при попытке выполнить findViewById(R.id.container).addView(imageView_); строку.

Комментарии:

1. Нет, мне действительно нужно добавить imageview с помощью кода, потому что вам нравится нажимать кнопку, вызывающую новый вид изображения

2. Если это так, код необходимо сильно изменить, я обновлю свой ответ через несколько часов. Но нужен ли вам новый imageview каждый раз, когда пользователь нажимает на кнопку? Или это только один?

3. для этого каждый раз новое.

4. что мне нужно поместить в template_imageview? поскольку это: ImageView imageView_ = (ImageView) getLayoutInflater().inflate(R.layout.activity_main, containerLayout, false);, вызывает это исключение: Вызвано: java.lang. Исключение ClassCastException: androidx.constraintlayout. виджет. ConstraintLayout не может быть преобразован в android.widget. Просмотр изображений.

5. Проверьте мой код правильно, это не R.layout.activity_main внутри метода inflate, это R.layout.template_imageview

Ответ №2:

Как называется ваш класс activity?

инструменты: контекст = атрибут «.main.Main» в макете ограничений и AndroidMainfest.xml это место, где вы свяжете макет со своим классом activity.

Если вышеуказанные шаги были выполнены, то ImageView imageView_ = findViewById(R.id.ImageView); должен предоставить вам доступ к вашему ImageView.

Комментарии:

1. main — это пакет, в котором хранится класс Main . и имя класса xml activity_main.xml

2. Можете ли вы поделиться своим activity_main.xml ?

3. XML-код, которым я поделился, является activity_main.xml код класса, который находится под этим кодом, является Основным классом.

4. можете ли вы поделиться своим AndroidManifest.xml вместо того , чтобы activity_main.xml ?

5. Я только что добавил его