Android 以编程方式设置TextView上的填充
我正在以动态/编程方式将TextView添加到预设的LinearLayout,但由于某些原因,设置填充不起作用。文本和字体都按预期显示,但填充似乎不起作用。与其他在线解决方案相比,这似乎是可行的。我做错了什么Android 以编程方式设置TextView上的填充,android,textview,Android,Textview,我正在以动态/编程方式将TextView添加到预设的LinearLayout,但由于某些原因,设置填充不起作用。文本和字体都按预期显示,但填充似乎不起作用。与其他在线解决方案相比,这似乎是可行的。我做错了什么 @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { final CustomItem listItem = listItems.get(position);
@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);
}
}
您似乎正在高分辨率设备上验证。您需要使用DP到PX的转换,然后使用转换后的值来设置填充 将dp转换为像素的方法是
public static int dpToPx(int dp) {
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
你的设置填充呼叫将是
step.setPadding(dpToPx(20), dpToPx(20), 0, dpToPx(20));
正如我所说
填充可用于将视图的内容偏移特定长度
像素数量
所以需要像这样将dp转换为px:
float density = getResources().getDisplayMetrics().density;
int paddingPixel = (int) (20 * density);
step.setPadding(paddingPixel, paddingPixel, 0, paddingPixel);
它在我的设备上工作。如果您在模拟器上测试了代码,请尝试真正的设备。