RadioButton 的文本在 setTextSize 调用后不显示
RadioButton's Text not displaying after setTextSize call
我已经以编程方式向预先存在的 RadioGroup
添加了几个 RadioButton
。按钮本身在那里并且可以点击,但它们的文本不会出现。我已经使用 setText
方法设置了它们的文本,并且通过使用 Toast
和 RadioButton
的 getText
方法,我能够确认所有按钮都拥有他们应该有的文本 - 他们只是不显示它们。
我已确保将它们的 alpha 设置为 1,将文本大小设置为 20sp,将它们的可见性设置为 View.Visible
,并且我多次尝试将文本颜色和背景颜色更改为对比色,但是文本仍然没有出现。
谁能帮我弄清楚如何让文字出现?
Java代码:
for(int i = 0; i < CERTAIN_CONSTANT_VALUE; i++)
{
RadioButton r = new RadioButton(this);
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
r.setLayoutParams(params);
r.setId(View.generateViewId());
r.setText(answers[i]);
r.setOnClickListener(this::onBtnClicked);
r.setTextSize(20, TypedValue.COMPLEX_UNIT_SP);
r.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
r.setTextColor(Color.BLACK);
r.setAlpha(1);
r.setVisibility(View.VISIBLE);
r.setBackgroundColor(Color.GREEN);
this.radioGroup.addView(r);
}
XML文件中的RadioGroup
:
<RadioGroup
android:id="@+id/radioGroup"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp">
</RadioGroup>
最小的、可重现的例子
Java:
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioGroup radioGroup = findViewById(R.id.radioGroup);
String[] answers = {"first", "second", "third", "fourth"};
for (int i = 0; i < 4; i++)
{
RadioButton r = new RadioButton(this);
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
r.setLayoutParams(params);
r.setId(View.generateViewId());
r.setText(answers[i]);
r.setOnClickListener(this::onBtnClicked);
r.setTextSize(20, TypedValue.COMPLEX_UNIT_SP);
r.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
r.setTextColor(Color.BLACK);
r.setAlpha(1);
r.setVisibility(View.VISIBLE);
r.setBackgroundColor(Color.GREEN);
radioGroup.addView(r);
}
}
public void onBtnClicked(View view){}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RadioGroup
android:id="@+id/radioGroup"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RadioGroup>
</LinearLayout>
只需将 setTextSize 更改为:
r.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
我已经以编程方式向预先存在的 RadioGroup
添加了几个 RadioButton
。按钮本身在那里并且可以点击,但它们的文本不会出现。我已经使用 setText
方法设置了它们的文本,并且通过使用 Toast
和 RadioButton
的 getText
方法,我能够确认所有按钮都拥有他们应该有的文本 - 他们只是不显示它们。
我已确保将它们的 alpha 设置为 1,将文本大小设置为 20sp,将它们的可见性设置为 View.Visible
,并且我多次尝试将文本颜色和背景颜色更改为对比色,但是文本仍然没有出现。
谁能帮我弄清楚如何让文字出现?
Java代码:
for(int i = 0; i < CERTAIN_CONSTANT_VALUE; i++)
{
RadioButton r = new RadioButton(this);
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
r.setLayoutParams(params);
r.setId(View.generateViewId());
r.setText(answers[i]);
r.setOnClickListener(this::onBtnClicked);
r.setTextSize(20, TypedValue.COMPLEX_UNIT_SP);
r.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
r.setTextColor(Color.BLACK);
r.setAlpha(1);
r.setVisibility(View.VISIBLE);
r.setBackgroundColor(Color.GREEN);
this.radioGroup.addView(r);
}
XML文件中的RadioGroup
:
<RadioGroup
android:id="@+id/radioGroup"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp">
</RadioGroup>
最小的、可重现的例子
Java:
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioGroup radioGroup = findViewById(R.id.radioGroup);
String[] answers = {"first", "second", "third", "fourth"};
for (int i = 0; i < 4; i++)
{
RadioButton r = new RadioButton(this);
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
r.setLayoutParams(params);
r.setId(View.generateViewId());
r.setText(answers[i]);
r.setOnClickListener(this::onBtnClicked);
r.setTextSize(20, TypedValue.COMPLEX_UNIT_SP);
r.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
r.setTextColor(Color.BLACK);
r.setAlpha(1);
r.setVisibility(View.VISIBLE);
r.setBackgroundColor(Color.GREEN);
radioGroup.addView(r);
}
}
public void onBtnClicked(View view){}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RadioGroup
android:id="@+id/radioGroup"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RadioGroup>
</LinearLayout>
只需将 setTextSize 更改为:
r.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);