установить Padding на TextView программно - PullRequest
0 голосов
/ 09 сентября 2018

Я динамически / программно добавляю 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);

    }

}

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Как официальный документ скажем,

Заполнение может использоваться, чтобы сместить содержание представления определенным количество пикселей

, поэтому нужно конвертировать dp в px следующим образом:

float density = getResources().getDisplayMetrics().density;
int paddingPixel = (int) (20 * density);
step.setPadding(paddingPixel, paddingPixel, 0, paddingPixel);
0 голосов
/ 09 сентября 2018

Кажется, вы проверяете на устройстве с высоким разрешением. Вам нужно использовать преобразование 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...