Android的TextView大小问题

时间:2018-07-09 13:13:52

标签: android textview size alertdialog

我从dimens.xml设置texview的大小。但是在不同的移动屏幕(如)中,它的行为有所不同。在荣誉6x设备中,字体看起来很大,而intex移动设备看起来很小,但是我应用相同的textsize。

这是我的代码:-

private fun changeStandardDialog(standardList: ArrayList<Category>) {
    val factory = LayoutInflater.from(this)
    val standardDialog = factory.inflate(R.layout.select_standard_diolog, null)
    selectedStandardId = SettingsHandler(this).getSettings("default_standard")

    for (item in standardList) {
        val rdbtn = RadioButton(this)
        rdbtn.id = item.id
        rdbtn.text = item.title

        if (selectedStandardId.toInt() == item.id) {
            rdbtn.isChecked = true
        }
        rdbtn.textSize = resources.getDimension(R.dimen.radio_text_size)
        val textColor = Color.parseColor("#323642")
        rdbtn.setButtonTintList(ColorStateList.valueOf(textColor));

        rdbtn.setPadding(20, 30, 30, 30)
        standardDialog.selectSubjectList.addView(rdbtn)
    }

    AlertDialog.Builder(this, R.style.MyDialogTheme)
            .setTitle(R.string.selectStd)
            .setPositiveButton("Ok") { dialog, whichButton ->
                if (standardDialog.selectSubjectList.checkedRadioButtonId > 0) {
                    changeSelectedStandardTitle(standardDialog.selectSubjectList.checkedRadioButtonId)
                    settingHandler.updateSettingsViaKey("default_standard", standardDialog.selectSubjectList.checkedRadioButtonId.toString())
                }
                dialog.dismiss()
            }
            .setNegativeButton("Cancel") { dialog, whichButton ->
                dialog.dismiss()
            }
            .setView(standardDialog)
            .create()
            .show()
}

我的R.dimen.radio_text_size的dimens.xml:-

<dimen name="radio_text_size">6sp</dimen>

在这里,我将6 sp用于单选按钮Textview显示不同的屏幕文本大小左侧Honor 6x ScreenShot和右侧Intex

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试一下:

rdbtn.textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,resources.getDimension(R.dimen.radio_text_size), resources.getDisplayMetrics());

答案 1 :(得分:0)

如果查看sp的实现,您会发现它会将您提供的值视为getDimension值。当您使用sp时,会将dimens.xml的{​​{1}}值转换为像素值,然后在TextView上设置该值时,它会将像素值转换为sp值转换为另一个(不同的)像素值。

您要么只想在类似的代码中使用sp值

rbbtn.textSize = 6f

或者您将要指定您正在使用像素,并使用从调光中获取的值

rdbtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(R.dimen.radio_text_size))