Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式设置TextView上的填充_Android_Textview - Fatal编程技术网

Android 以编程方式设置TextView上的填充

Android 以编程方式设置TextView上的填充,android,textview,Android,Textview,我正在以动态/编程方式将TextView添加到预设的LinearLayout,但由于某些原因,设置填充不起作用。文本和字体都按预期显示,但填充似乎不起作用。与其他在线解决方案相比,这似乎是可行的。我做错了什么 @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { final CustomItem listItem = listItems.get(position);

我正在以动态/编程方式将TextView添加到预设的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);

    }

}

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

它在我的设备上工作。如果您在模拟器上测试了代码,请尝试真正的设备。