Android-чипы занимают дополнительные места, не в состоянии обернуть - PullRequest
0 голосов
/ 23 мая 2019

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

Ниже мой код:

xml:

<com.google.android.material.chip.ChipGroup
    android:id="@+id/cg"
    android:layout_width="0dp"
    android:layout_weight="75"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="5dp"
    android:textColor="@android:color/black"
    android:textStyle="bold"
    android:textSize="12sp"
    app:singleSelection="false"
    app:chipSpacingVertical="5dp"
    app:chipSpacingHorizontal="5dp"
    app:singleLine="false"
    app:chipSpacing="2dp">

Вот как динамически добавлять фишки:

for(int i=0;i<cartoonTypes.length;i++){
    chip = new Chip(this);
    chip.setText(cartoonTypes[i].trim());
    chip.setTextColor(Color.WHITE);
    chip.setChipBackgroundColor(getResources().getColorStateList(R.color.colorChip));
    chip.setTextSize(12);
    chip.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
    chip.setPadding(0,0,0,0);
    cgMovieGenre.addView(chip);
    ChipGroup.LayoutParams layoutParams = (ChipGroup.LayoutParams) chip.getLayoutParams();;
    int dpSize = px2dp(12);;
    layoutParams.height = dpSize;
    layoutParams.width = ChipGroup.LayoutParams.WRAP_CONTENT;
    chip.setLayoutParams(layoutParams);
}

метод px2dp делает это:

int px2dp(int px){
    metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int h = (px * metrics.densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
    return h;
}

My build.gradle имеет следующие зависимости:

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
implementation 'androidx.cardview:cardview:1.0.0-beta01'
implementation 'com.google.android.material:material:1.0.0-beta01'

Вот что я вижу:

screenshot, chip-group

Я хочу, чтобы чип использовал минимально возможную ширину в соответствии с его текстом.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Вы должны правильно установить заполнение для чипа, попробуйте это:

chip.setChipStartPadding(0);
chip.setChipEndPadding(0);
0 голосов
/ 23 мая 2019

Для чипов это не (внутреннее) «заполнение», а (внешнее) «расстояние»:

  • app:chipSpacing  - добавляет интервал как к горизонтальной, так и к вертикальной оси.
  • app:chipSpacingHorizontal - добавляет интервал к горизонтальной оси.
  • app:chipSpacingVertical - добавляет интервал к вертикальной оси.

наименьший интервал с переносом строки будет:

app:singleLine="false"
app:chipSpacing="0dp"

альтернативно, оберните ChipGroup в HorizontalScrollView с app:singleLine="true".

...