再会。我正在使用本机 PrintedPdfDocument 类构建一个简单的 pdf 报告,我需要将带有超链接的文本插入到文档中。这是我对pdf页面的简单实现。
PrintedPdfDocument document = new PrintedPdfDocument(context, attributes);
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
Canvas c = page.getCanvas();
TextPaint p = new TextPaint();
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的几种方法,但仍然没有运气。
使用 Canvas drawText() 方法的第一种方法。结果:没有超链接的“一些链接”。
c.drawText("<a href='https://example.com'>some link</a>", 30, 30, p);
Run Code Online (Sandbox Code Playgroud)
第二种方式使用 SpannableString。结果:“一些链接”。
String link = "https://example.com";
SpannableString s = new SpannableString("some link");
s.setSpan(new URLSpan(link), 0, link.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
c.drawText(s.toString(), 30, 30, p);
Run Code Online (Sandbox Code Playgroud)
使用 StaticLayout 的第三种方式。结果:空白。
Spanned spanned = Html.fromHtml("<a href='https://example.com'>some link</a>", null, null);
StaticLayout l = new StaticLayout(spanned, p, …Run Code Online (Sandbox Code Playgroud) 我有一个基于RecyclerView的简单 mp3 播放器。有一个Adapter和ViewHolder用于处理播放列表中的曲目。
public class TracksAdapter extends RecyclerView.Adapter<TracksAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cell_playlist, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.trackName.setText("Track " + position);
}
@Override
public int getItemCount() {
return tracks.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
final TextView trackName;
ViewHolder(View itemView) {
super(itemView);
trackName = itemView.findViewById(R.id.trackName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我单击曲目时,我想更改播放列表中所选曲目的背景颜色。问题是当我为一个项目设置背景颜色时,它会影响播放列表中的每十个单元格。
例如,如果播放列表中有 100 首曲目,则将突出显示 …