【问题标题】:Setting image view in linear layout programmatically in kotlin在 kotlin 中以编程方式在线性布局中设置图像视图
【发布时间】:2020-08-16 16:33:11
【问题描述】:

我正在尝试在图像视图中设置图像,然后当我单击按钮时将其附加到线性布局,它没有显示我所做的任何事情

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, java.lang.String, 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, java.lang.String, android.content.Context, 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, android.content.Context, android.util.AttributeSet, 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, android.view.View, android.util.AttributeSet, 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, android.view.ViewGroup, 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, android.content.Intent, 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

这是我点击按钮时的日志

【问题讨论】:

    标签: android android-studio kotlin imageview


    【解决方案1】:

    我认为您忘记了错误消息(可能在您粘贴到此处的日志上方)。

    无论如何,我不能直接说出哪里出了问题,但我认为有 2 种替代(更好)的方法来做你正在做的事情

    如果您只想添加 1 个 ImageView(即 0 或 1),您只需在 click 方法的代码中将 View 可见性设置为 VISIBLE,并在 xml 中将其设置为 GONE(或不可见)

    如果有多个,您可能需要一个 recyclerview,而且如果您可以添加多个图像,则无论如何您都需要滚动。

    如果它是这 2 个的混合,这意味着您有超过 1 个但不需要滚动(例如最多 3 个项目),您还应该只使用 View 可见性而不是 Recyclerview

    如果没有其他方法,以编程方式添加视图应该是最后的手段,但在这种情况下它会

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2019-12-18
      相关资源
      最近更新 更多