代码之家  ›  专栏  ›  技术社区  ›  rafvasq

以编程方式设置文本视图的填充

  •  0
  • rafvasq  · 技术社区  · 6 年前

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

    @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);
    
        }
    
    }
    
    2 回复  |  直到 5 年前
        1
  •  0
  •   navylover    6 年前

    作为 official doc 说,

    填充可以用来将视图的内容偏移一个特定的值

    所以需要像这样把dp转换成px:

    float density = getResources().getDisplayMetrics().density;
    int paddingPixel = (int) (20 * density);
    step.setPadding(paddingPixel, paddingPixel, 0, paddingPixel);
    
        2
  •  1
  •   Pankaj Kumar    6 年前

    似乎你正在高分辨率设备上验证。您需要使用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));