Android 复选框文本未显示

10
我正在尝试在我的Android活动中动态创建一些复选框,但它没有呈现文本。
这是我简化后的代码...
1.布局XML:
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dip">

    ...
    <LinearLayout
        android:id="@+id/register_attracted_to"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />
    ...
</LinearLayout>
  • 活动代码:

  • final LinearLayout attractedTo = (LinearLayout) findViewById(R.id.register_attracted_to);
    
    final CheckBox male = new CheckBox(this);
    male.setText("Male");
    attractedTo.addView(male);
    
    final CheckBox female = new CheckBox(this);
    female.setText("Female");
    attractedTo.addView(female);
    

    我的“真实”代码比这个复杂一些(任何动态都有可能),这就是为什么我没有在布局本身中包含复选框的原因。然而,即使是简化了我的代码,它仍然不能正确地呈现复选框文本。

    这里有一个屏幕截图来演示(请参见“吸引力”部分),还有一些额外的内容来证明我的垂直布局似乎工作正常:

    Android 复选框丢失文本


    我不会动态添加UI组件,因为在开发时很难审查它们。开发人员需要运行整个应用程序才能看到添加的组件。我谦虚地建议将它们添加为不可见状态。这非常轻量级,因为它们从未被绘制,但仍然可以找到(findViewById)。 - AlikElzin-kilaka
    1
    复选框是通过HttpRequest生成的,这意味着您的建议是不可能的。 - Matt Huggins
    4个回答

    23
    当然,在发布赏金之后我很快就解决了这个问题。;) 原来是因为我将容器视图的背景色设置为白色,导致默认的白色文本与容器的背景色混合在一起。解决方法是设置每个复选框的文本颜色。例如:
    final LinearLayout attractedTo = (LinearLayout) findViewById(R.id.register_attracted_to);
    
    final CheckBox male = new CheckBox(this);
    male.setText("Male");
    male.setTextColor(getResources().getColor(R.color.foreground_text));
    attractedTo.addView(male);
    
    final CheckBox female = new CheckBox(this);
    female.setText("Female");
    female.setTextColor(getResources().getColor(R.color.foreground_text));
    attractedTo.addView(female);
    

    1
    这也发生在我身上。似乎在Honeycomb之前的设备上,复选框的默认文本颜色是白色。 - Kent Andersen
    是的,就像文本视图一样。 - Vasil Valchev

    5

    您没有设置布局参数,布局参数指定控件的显示方式。

    final CheckBox female = new CheckBox(this);
    female.setText("Female");
    female .setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
    attractedTo.addView(female);
    

    我之前尝试过这样做,但不起作用:male.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 不过一旦有时间,我会尝试您的解决方案。 - Matt Huggins
    看起来复选框只接受 ViewGroup.LayoutParams,并且这个构造函数没有第三个参数,就像你在这里提供的一样。我尝试使用每个参数为 LayoutParams.WRAP_CONTENT 的两个参数构造函数,但那也不起作用。 - Matt Huggins
    不是我的问题。整个周末我都在尝试,但无论是在模拟器上还是在手机上都没有成功。 - Matt Huggins

    1
    也许是因为你的真实代码被简化了,但是你有设置复选框的宽度和高度吗?

    请查看@jazz的回答中我的评论。 - Matt Huggins

    0

    我刚刚也犯了同样的错误,发现我在初始化代码中使用了setText("")而不是setChecked(false)。唉!


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接