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>
这是我迄今为止尝试添加 imageView 的代码
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让我发布这个编辑,因为它说它有这么多代码而不是那么多细节////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ////////////////////////////////////
解决方案
既然你提到你需要一个以编程方式填充的图像视图,你可以这样做:
- 制作一个新的布局文件(例如 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。
- 现在通过代码膨胀并添加图像视图:
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_);
行时,您将获得运行时异常。
推荐阅读
- java - Lucene 通过 ID 缓慢检索文档
- oracle - 删除所有雇佣率高于其经理的员工
- r - R中偶数和奇数的If Else语句
- python - 需要帮助理解 Python 中的循环程序/嵌套循环
- sockets - 如何在 pyOpenSSL 中使用 CRL?
- php - Open PDF in new tab using PHP
- r - ggplot2中雷达图中未表示的线和区域
- java - Gradle 同步失败:所有 Firebase 库必须高于或低于 14.0.0
- c# - C# Windows Form KeyCombination Detect 失败,没有任何反馈
- django - 单输入django表单