问题描述
我试图在图像视图中设置图像,然后在单击按钮时将其附加到“线性”布局中,但此操作并未显示任何内容
fun click(view: View) {
val dimensionInDp = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,60f,displayMetrics()
)
val params = ViewGroup.LayoutParams(dimensionInDp.toInt(),ViewGroup.LayoutParams.WRAP_CONTENT
)
val imageView = ImageView(this)
imageView.setimageResource(R.mipmap.ac)
imageView.id= ViewCompat.generateViewId()
imageView.layoutParams=params
imageView.visibility= View.VISIBLE
card_layout.addView(imageView)
}
它没有显示图像,我也不知道为什么
日志猫
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void androidx.appcompat.widget.ActionBarContainer.<init>(android.content.Context,android.util.AttributeSet) (ActionBarContainer.java:63)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at java.lang.Object java.lang.reflect.Constructor.newInstance0!(java.lang.Object[]) (Constructor.java:-2)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:430)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.createView(java.lang.String,java.lang.String,android.util.AttributeSet) (LayoutInflater.java:656)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View,android.content.Context,android.util.AttributeSet,boolean) (LayoutInflater.java:798)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View,android.util.AttributeSet) (LayoutInflater.java:738)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser,android.view.View,boolean) (LayoutInflater.java:869)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser,boolean) (LayoutInflater.java:832)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser,android.view.ViewGroup,boolean) (LayoutInflater.java:518)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.inflate(int,boolean) (LayoutInflater.java:426)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.View android.view.LayoutInflater.inflate(int,android.view.ViewGroup) (LayoutInflater.java:377)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:896)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:806)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:693)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:170)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void com.example.cardgame.MainActivity.onCreate(android.os.Bundle) (MainActivity.kt:19)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6964)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity,android.os.Bundle) (Instrumentation.java:1123)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at android.app.Activity android.app.ActivityThread.performlaunchActivity(android.app.ActivityThread$ActivityClientRecord,android.content.Intent) (ActivityThread.java:2752)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord,android.content.Intent,java.lang.String) (ActivityThread.java:2870)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.ActivityThread.-wrap12(android.app.ActivityThread,android.app.ActivityThread$ActivityClientRecord,java.lang.String) (ActivityThread.java:-1)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1573)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.os.Looper.loop() (Looper.java:156)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6605)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object,java.lang.Object[]) (Method.java:-2)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:999)
2020-08-16 21:12:12.434 7805-7805/com.example.cardgame I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:889)
2020-08-16 21:12:12.500 7805-7805/com.example.cardgame I/HwSecImmHelper: mSecurityInputMethodService is null
2020-08-16 21:12:12.568 7805-7830/com.example.cardgame I/Openglrenderer: Initialized EGL,version 1.4
2020-08-16 21:12:12.579 7805-7830/com.example.cardgame W/linker: /vendor/lib64/libhwuibp.so: unused DT entry: type 0xf arg 0xe3a
2020-08-16 21:12:13.489 7805-7805/com.example.cardgame I/hwaps: JNI_OnLoad
2020-08-16 21:12:13.629 7805-7805/com.example.cardgame I/BitmapFactory: set decoder allocator to gralloc
这是我单击按钮时的日志
解决方法
我认为您忘记了错误消息(可能在您粘贴在此处的日志上方)。
无论如何,我无法直接说出问题所在,但我认为有两种替代(更好)的方式来做您正在做的事
如果您只想添加1个ImageView(表示0或1),则只需在click方法中的代码中将View可见性设置为VISIBLE,然后在xml中将其设置为GONE(或不可见)
如果有多个图像,您可能需要一个recyclerview,并且如果您可以添加多个图像,则无论如何都需要滚动。
如果这是这2个的混合,则意味着您有1个以上,但不需要滚动(例如,最多3个项目),您还应该只使用View可见性而不是Recyclerview
如果没有其他方法,以编程方式添加视图应该是最后的选择,在这种情况下还是可以的