【问题标题】:set Padding on TextView programmatically以编程方式在 TextView 上设置填充
【发布时间】:2019-11-14 14:17:33
【问题描述】:

我正在动态/以编程方式将 TextViews 添加到预设的 LinearLayout 但由于某种原因设置填充不起作用。文本和字体都按预期显示,但填充似乎不起作用。与其他在线解决方案相比,这似乎应该有效。我做错了什么?

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    final CustomItem listItem = listItems.get(position);

    holder.Heading.setText(listItem.getHeading());

    ArrayList<String> directions = listItem.getDirections();
    for(int i = 0; i < directions.size(); i++) {
        TextView step = new TextView(context);
        step.setPadding(20, 20, 0, 20);
        step.setText(directions.get(i));
        step.setTypeface(ResourcesCompat.getFont(context, R.font.lato_light));
        holder.CustomLayout.addView(step);
    }
}

public class ViewHolder extends RecyclerView.ViewHolder{

    public LinearLayout LegLayout;
    public TextView Heading;

    public ViewHolder(View itemView) {
        super(itemView);

        Heading = itemView.findViewById(R.id.heading);
        LegLayout = itemView.findViewById(R.id.directionsLayout);

    }

}

【问题讨论】:

  • 它适用于我的设备。如果您在模拟器上测试过代码,请尝试使用真机。

标签: android textview


【解决方案1】:

您似乎正在高分辨率设备上进行验证。您需要使用 DP 到 PX 转换,然后将转换后的值用于setPadding()

dp转像素的方法是

public static int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

您的setPadding 电话将是

step.setPadding(dpToPx(20), dpToPx(20), 0, dpToPx(20));

【讨论】:

    【解决方案2】:

    正如official doc 所说,

    填充可用于将视图的内容偏移特定的 像素数

    所以需要像这样将 dp 转换为 px:

    float density = getResources().getDisplayMetrics().density;
    int paddingPixel = (int) (20 * density);
    step.setPadding(paddingPixel, paddingPixel, 0, paddingPixel);
    

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2011-03-09
      • 2011-12-16
      • 1970-01-01
      • 2022-10-14
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多