Центрирование CardView в LinearLayout программно - PullRequest
0 голосов
/ 27 августа 2018
public void makeCard( Context context, View view, String time, String startpt1, String startpt2, String endpt1, String endpt2)
{
    CardView card = new CardView(context);
    LinearLayout ll = view.findViewById(R.id.rides);
    // Set the CardView layoutParams
    int w = getResources().getDimensionPixelSize(R.dimen._270sdp);
    int h = getResources().getDimensionPixelSize(R.dimen._120sdp);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(w, h);
    card.setForegroundGravity(17);
    card.setLayoutParams(params);


    card.setRadius(60);
    card.setCardElevation(60);

    Typeface latoregular = getResources().getFont(R.font.latoregular);
    Typeface latobold = getResources().getFont(R.font.latobold);
    // Initialize a new TextView to put in CardView

    TextView tv = new TextView(context);
    tv.setLayoutParams(params);
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    try {
        Date date = format.parse(time);
        tv.setText(date.toString());
        Log.d("ASD", String.valueOf(date));
    } catch (ParseException e) {
        e.printStackTrace();
    }


    tv.setTextSize(14);
    tv.setPadding(60,40,0,0);
    tv.setTextColor(Color.parseColor("#1fb286"));
    tv.setTypeface(latobold);
    tv.setTypeface(tv.getTypeface(), Typeface.BOLD);
    card.addView(tv);
    ll.addView(card);

}

Это вид карты обнимает сторону, и независимо от того, что я изменяю в гравитации макета, карта не двигается. Я могу установить отступ слева, чтобы он казался центрированным, но на экранах разных размеров он не будет идеально центрирован

1 Ответ

0 голосов
/ 27 августа 2018

Вы создаете RelativeLayout.LayoutParams и используете их для LinearLayout и CardView (что-то вроде FrameLayout). Это вряд ли будет работать хорошо. Насколько я знаю, нужно использовать, например. LinearLayout.LayoutParams для View, который вы хотите добавить к LinearLayout (практическое правило: используйте LayoutParams с именем родителя ViewGroup)

Чтобы центрировать CardView, вы должны программно установить его атрибут android:layout_gravity:

int w = getResources().getDimensionPixelSize(R.dimen._270sdp);
int h = getResources().getDimensionPixelSize(R.dimen._120sdp);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(w, h);   
params.gravity = Gravity.CENTER;
...