我使用带有动态芯片的芯片组。我希望芯片根据它们的文字被包裹在宽度中。但即使没有填充,它也需要额外的空间。
下面是我的代码:
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;
}
我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'
这就是我所看到的:
我希望芯片根据其文本使用尽可能小的宽度。