AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77586552
Accepted
Daniel Walker
Daniel Walker
Asked: 2023-12-01 23:59:25 +0800 CST2023-12-01 23:59:25 +0800 CST 2023-12-01 23:59:25 +0800 CST

Botão não responde após clicar no campo de texto

  • 772

Estou apenas começando com o desenvolvimento de aplicativos Android e me deparei com um erro estranho ao implementar um arquivo OnClickListener. Comecei com uma "Atividade de visualizações vazias" no Android Studio. Adicionei, entre outros elementos da interface do usuário, a Button, an EditTexte a ScrollViewcontendo a TextView. Defino um OnClickListenerno botão para que uma mensagem logcat seja emitida.

Quando clico no botão, ele emite a mensagem logcat conforme o esperado. No entanto, assim que clico no campo de texto, o botão deixa de responder pelo restante da vida útil do aplicativo. O estranho é que tudo funciona perfeitamente se eu remover o arquivo ScrollView.

Aqui está meu MRE:

atividade_main.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/startErrorText"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="160dp"
        android:layout_marginTop="30dp"
        android:layout_marginEnd="160dp"
        android:text="Start"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textField" />

    <EditText
        android:id="@+id/textField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="80dp"
        android:layout_marginTop="48dp"
        android:layout_marginEnd="80dp"
        android:ems="10"
        android:hint="Enter some text"
        android:inputType="text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="409dp"
        android:layout_height="585dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="1dp"
        android:layout_marginBottom="2dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/startButton"
        app:layout_constraintVertical_bias="1.0">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/logView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button: Button = findViewById(R.id.startButton)
        button.setOnClickListener(object : OnClickListener {
            override fun onClick(v: View?) {
                Log.i("MyApp", "Button pressed")
            }
        })
    }
}

Aqui está a saída do logcat:

ziparchive              com.example.test                     W  Unable to open '/data/data/com.example.test/code_cache/.overlay/base.apk/classes3.dm': No such file or directory
ziparchive              com.example.test                     W  Unable to open '/data/app/~~6ohH-jaL6kb5-3S5sLz1rw==/com.example.test-21xtpoSa2I8lnFAMirvZRA==/base.dm': No such file or directory
ziparchive              com.example.test                     W  Unable to open '/data/app/~~6ohH-jaL6kb5-3S5sLz1rw==/com.example.test-21xtpoSa2I8lnFAMirvZRA==/base.dm': No such file or directory
nativeloader            com.example.test                     D  Configuring clns-6 for other apk /data/app/~~6ohH-jaL6kb5-3S5sLz1rw==/com.example.test-21xtpoSa2I8lnFAMirvZRA==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~6ohH-jaL6kb5-3S5sLz1rw==/com.example.test-21xtpoSa2I8lnFAMirvZRA==/lib/arm64, permitted_path=/data:/mnt/expand:/data/user/0/com.example.test
GraphicsEnvironment     com.example.test                     V  Currently set values for:
GraphicsEnvironment     com.example.test                     V    angle_gl_driver_selection_pkgs=[]
GraphicsEnvironment     com.example.test                     V    angle_gl_driver_selection_values=[]
GraphicsEnvironment     com.example.test                     V  ANGLE GameManagerService for com.example.test: false
GraphicsEnvironment     com.example.test                     V  com.example.test is not listed in per-application setting
GraphicsEnvironment     com.example.test                     V  Neither updatable production driver nor prerelease driver is supported.
libEGL                  com.example.test                     D  loaded /vendor/lib64/egl/libEGL_emulation.so
AppCompatDelegate       com.example.test                     D  Checking for metadata for AppLocalesMetadataHolderService : Service not found
libEGL                  com.example.test                     D  loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
libEGL                  com.example.test                     D  loaded /vendor/lib64/egl/libGLESv2_emulation.so
om.example.test         com.example.test                     W  Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
om.example.test         com.example.test                     W  Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
Compatibil...geReporter com.example.test                     D  Compat change id reported: 210923482; UID 10191; state: ENABLED
Compatibil...geReporter com.example.test                     D  Compat change id reported: 171228096; UID 10191; state: ENABLED
Compatibil...geReporter com.example.test                     D  Compat change id reported: 237531167; UID 10191; state: DISABLED
OpenGLRenderer          com.example.test                     W  Unknown dataspace 0
OpenGLRenderer          com.example.test                     W  Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
OpenGLRenderer          com.example.test                     W  Failed to initialize 101010-2 format, error = EGL_SUCCESS
Gralloc4                com.example.test                     I  mapper 4.x is not supported
OpenGLRenderer          com.example.test                     E  Unable to match the desired swap behavior.
AutofillManager         com.example.test                     D  notifyViewEnteredForFillDialog:1073741824
EGL_emulation           com.example.test                     D  app_time_stats: avg=145.48ms min=0.87ms max=1433.47ms count=10
EGL_emulation           com.example.test                     D  app_time_stats: avg=181.58ms min=13.65ms max=2822.69ms count=17
MyApp                   com.example.test                     I  Button pressed
ProfileInstaller        com.example.test                     D  Installing profile for com.example.test
EGL_emulation           com.example.test                     D  app_time_stats: avg=39.13ms min=0.77ms max=1255.29ms count=48
Compatibil...geReporter com.example.test                     D  Compat change id reported: 163400105; UID 10191; state: ENABLED
ImeTracker              com.example.test                     I  com.example.test:39ecb7d6: onRequestShow at ORIGIN_CLIENT_SHOW_SOFT_INPUT reason SHOW_SOFT_INPUT
InputMethodManager      com.example.test                     D  showSoftInput() view=androidx.appcompat.widget.AppCompatEditText{4a6450d VFED..CL. .F.P..ID 250,132-830,256 #7f0801f9 app:id/textField aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
AssistStructure         com.example.test                     I  Flattened final assist data: 1492 bytes, containing 1 windows, 8 views
InsetsController        com.example.test                     D  show(ime(), fromIme=true)
InteractionJankMonitor  com.example.test                     D  Build configuration failed!
                                                                                                    java.lang.IllegalArgumentException: Must pass in a valid surface control if only instrument surface; 
                                                                                                        at com.android.internal.jank.InteractionJankMonitor$Configuration.validate(InteractionJankMonitor.java:1259)
                                                                                                        at com.android.internal.jank.InteractionJankMonitor$Configuration.<init>(InteractionJankMonitor.java:1217)
                                                                                                        at com.android.internal.jank.InteractionJankMonitor$Configuration.<init>(Unknown Source:0)
                                                                                                        at com.android.internal.jank.InteractionJankMonitor$Configuration$Builder.build(InteractionJankMonitor.java:1197)
                                                                                                        at com.android.internal.jank.InteractionJankMonitor.begin(InteractionJankMonitor.java:611)
                                                                                                        at android.view.inputmethod.ImeTracker$ImeJankTracker.onRequestAnimation(ImeTracker.java:717)
                                                                                                        at android.view.InsetsController$InternalAnimationControlListener$2.onAnimationStart(InsetsController.java:448)
                                                                                                        at android.animation.Animator$AnimatorListener.onAnimationStart(Animator.java:695)
                                                                                                        at android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda0.call(Unknown Source:4)
                                                                                                        at android.animation.Animator.callOnList(Animator.java:669)
                                                                                                        at android.animation.Animator.notifyListeners(Animator.java:608)
                                                                                                        at android.animation.Animator.notifyStartListeners(Animator.java:625)
                                                                                                        at android.animation.ValueAnimator.startAnimation(ValueAnimator.java:1334)
                                                                                                        at android.animation.ValueAnimator.start(ValueAnimator.java:1149)
                                                                                                        at android.animation.ValueAnimator.start(ValueAnimator.java:1173)
                                                                                                        at android.view.InsetsController$InternalAnimationControlListener.onReady(InsetsController.java:470)
                                                                                                        at android.view.InsetsAnimationThreadControlRunner.lambda$new$0(InsetsAnimationThreadControlRunner.java:129)
                                                                                                        at android.view.InsetsAnimationThreadControlRunner.$r8$lambda$3zGKYd3XPzPnvMO2hiF8a88M6T0(Unknown Source:0)
                                                                                                        at android.view.InsetsAnimationThreadControlRunner$$ExternalSyntheticLambda2.run(Unknown Source:6)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:958)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:205)
                                                                                                        at android.os.Looper.loop(Looper.java:294)
                                                                                                        at android.os.HandlerThread.run(HandlerThread.java:67)
ImeTracker              com.example.test                     I  com.example.test:39ecb7d6: onShown
EGL_emulation           com.example.test                     D  app_time_stats: avg=213.12ms min=0.85ms max=500.33ms count=5
EGL_emulation           com.example.test                     D  app_time_stats: avg=500.68ms min=499.36ms max=502.83ms count=3

Isso java.lang.IllegalArgumentExceptionocorre apenas algumas vezes, mas o bug geral ocorre sempre.

  • 2 2 respostas
  • 40 Views

2 respostas

  • Voted
  1. Cloverleaf
    2023-12-02T01:29:53+08:002023-12-02T01:29:53+08:00

    Executei seu código no meu Android Studio: as ScrollViewsobreposições estão na buttonmetade. Se eu substituir na activity_main.xmlseção <ScrollViewa linha

    app:layout_constraintVertical_bias="1.0">
    

    por

    app:layout_constraintVertical_bias="0.0">
    

    tudo funciona. Em geral, porém, você poderia programar activity_main.xmlde forma muito mais simples e clara.

    • 1
  2. Best Answer
    Nazarii Moshenskiy
    2023-12-02T01:48:17+08:002023-12-02T01:48:17+08:00

    Quando você clica em EditText, o teclado aparece e há menos espaço para ScrollView. Como você ScrollViewtem tamanho fixo, ele se sobrepõe ao botão. Você pode ver isso em Layout Inspector Eu fiz uma captura de tela para você:

    insira a descrição da imagem aqui

    SOLUÇÃO: Você precisa definir ScrollViewa altura como 0dp. ConstraintLayoutinterpreta como "preencher todo o espaço disponível". E quando o teclado aparecer, ele ocupará apenas o espaço disponível e não se sobreporá ao botão.

    Basta copiar este xml e funcionará bem:

    <?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/startErrorText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <Button
            android:id="@+id/startButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="160dp"
            android:layout_marginTop="30dp"
            android:layout_marginEnd="160dp"
            android:text="Start"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textField" />
    
        <EditText
            android:id="@+id/textField"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="80dp"
            android:layout_marginTop="48dp"
            android:layout_marginEnd="80dp"
            android:ems="10"
            android:hint="Enter some text"
            android:inputType="text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <ScrollView
            android:id="@+id/scrollView"
            android:layout_width="409dp"
            android:layout_height="0dp"
            android:layout_marginStart="1dp"
            android:layout_marginTop="20dp"
            android:layout_marginEnd="1dp"
            android:layout_marginBottom="2dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/startButton">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/logView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </LinearLayout>
        </ScrollView>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    Esta é a aparência do seu ScrollView agora (verifique o espaço que ele usa): insira a descrição da imagem aqui

    CONSELHOS: Se você usar, ConstraintLayouttente não codificar tamanhos e confie em restrições, se possível.

    • 1

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve