java - 如何在android中动态添加入口芯片以及图标

标签 java android android-studio material-design android-chips

我需要使用 Material Design 库动态添加条目芯片以及将通过 API 调用检索的图标。 如何使用Glide库设置芯片图标?

注意:我之前没有在可绘制文件夹中保存任何图像。所有数据都通过 API 调用检索。

最佳答案

例如,您可以使用此解决方法。自定义芯片:

public class GlideChip extends Chip {

    public GlideChip(Context context) {
        super(context);
    }

    public GlideChip(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * Set an image from an URL for the {@link Chip} using {@link com.bumptech.glide.Glide}
     * @param url icon URL
     * @param errDrawable error icon if Glide return failed response
     */
    public GlideChip setIconUrl(String url, Drawable errDrawable) {
        Glide.with(this)
                .load(url)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        setChipIcon(errDrawable);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        setChipIcon(resource);
                        return false;
                    }
                }).preload();
        return this;
    }

}

创建GlideChip,加入芯片组并启动工程:

public class ChipFragment extends Fragment {

    private ChipGroup chipGroup;

    public ChipFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_chip, container, false);
        chipGroup = view.findViewById(R.id.chipGroup);
        Chip chip = createChip("John Doe", "https://i1.sndcdn.com/avatars-000197335271-mztyvq-t500x500.jpg");
        chipGroup.addView(chip);
        return view;
    }

    private Chip createChip(String name, String avatarUrl) {
        GlideChip chip = new GlideChip(getContext());
        chip.setText(name);
        chip.setIconUrl(avatarUrl, getResources().getDrawable(R.drawable.err_avatar));
        chip.setClickable(true);
        chip.setFocusable(true);
        return chip;
    }

}

P/S...不要忘记将 Glide 添加到 build.gradle 中。参见 here

关于java - 如何在android中动态添加入口芯片以及图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554862/

相关文章:

java - Android - 定义微调器中显示的值(与所选值不同)

android - 在 Firebase Auth (android) 之后在数据库中创建用户

java - 如何让Alarm BootReceiver在特定时间发送通知?

android - 如何解决公共(public)抽象乐趣入队的参数过多(responseCallback : Callback): Unit defined in okhttp3. 调用

java - 从 java servlet 将 'success' 响应发送回 Acrobat Reader

java - 无法在 WinXP 32 位上为 JavaFX 应用程序构建 native 包

Java - 将 List<Double> 添加到 List<List<Object>>

Android:如何始终从特定 Activity 启动应用程序?

Android ResultReceiver 跨包

android-studio - android studio中flutter和dart的插件问题