2201_75564572 2024-05-06 23:53 采纳率: 55.6%
浏览 69
已结题

Android项目出错无法运行

img

img

img


代码中并没有标红,但在点击运行后,显示txtPwd接触目标尺寸太小,请问要如何解决

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-06 23:53
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试运行一个Android应用,并遇到了一些布局错误以及在运行时的崩溃。针对这些具体的问题,我将为你提供详细的解决步骤。

    首先,让我们解决XML布局文件中的警告:

    1. 触摸目标大小过小Touch target size too small): 这个警告是因为你的EditText控件的触摸区域可能小于推荐的最小值(48x48 dp)。为了修复这个问题,你需要确保EditText的宽和高至少为48dp。可以这样做:
    <EditText
        android:id="@+id/txtPwd"
        android:layout_width="0dp" <!-- 使用MATCH_CONSTRAINT或WRAP_CONTENT并配合约束 -->
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp" <!-- 添加左右内边距,保证触摸区域足够大 -->
        android:layout_marginEnd="16dp"
        android:hint="请输入密码"
        android:textSize="30sp" <!-- 使用sp单位而不是dp -->
        android:textColor="#8c6931"
        app:layout_constraintWidth_default="spread" <!-- 分配足够的宽度 -->
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/btnCancel" />
    

    这里,我添加了左右内边距,并且使用了app:layout_constraintWidth_default="spread"来分配足够的宽度给EditText

    1. 硬编码文本Hardcoded text): 对于硬编码文本,你应该考虑使用字符串资源,这样可以方便地进行国际化。对于TextView,可以这样做:
    <TextView
        android:id="@+id/tvPwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="@string/password_prompt"
        android:textSize="30sp"
        android:textColor="#8c6931"
        app:layout_constraintTop_toTopOf="parent" />
    

    然后,在strings.xml文件中添加相应的字符串资源:

    <string name="password_prompt">请输入密码:</string>
    
    1. 使用'dp'而非'sp': 文本大小应该使用sparse pixels (sp)单位,特别是对于用户可调整的文字大小。我已经在上述EditText的代码中修改了这一点。

    2. start/end属性替代left/right属性: 这是为了适应不同的语言方向,例如从右到左的语言。你可以通过以下方式更新你的Button标签:

    <Button
        android:id="@+id/btnCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintTop_toBottomOf="@+id/txtPwd"
        app:layout_constraintEnd_toStartOf="@+id/btnSet" />
    

    这里,我将android:layout_marginLeftandroid:layout_marginRight替换为android:layout_marginStartandroid:layout_marginEnd

    1. 使用Autofill: 要启用自动填充功能,你可以为EditText设置android:autofillHints属性,例如:
    <EditText
        ...
        android:autofillHints="password"
        ... />
    

    现在,关于运行时崩溃的问题,你提供的日志中没有足够的信息来确定具体的崩溃原因。但是,崩溃信息通常会包含有关哪一行代码引发崩溃的提示。请检查adb logcat输出的完整堆栈跟踪,找到类似Caused by: java.lang.RuntimeException:这样的行,它后面跟着错误的详细描述和堆栈跟踪。如果你能提供这部分详细信息,我可以帮你进一步诊断问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月6日