我正在动态/以编程方式将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);
}
}
答案 0 :(得分: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));
答案 1 :(得分:0)
填充可用于将视图的内容偏移特定的 像素
的数量
因此需要像这样将dp转换为px:
float density = getResources().getDisplayMetrics().density;
int paddingPixel = (int) (20 * density);
step.setPadding(paddingPixel, paddingPixel, 0, paddingPixel);