-1
3行目のテキストの最後に "..more"を追加し、さらにクリックするとポップアップ(またはカスタムダイアログ)にフルテキストを表示します。だから私はこの機能のために以下のコードを使った。あなたがポートレートモードになっているときにコードは正常に機能していますが、デバイスの向きを変更すると機能しません。そして私はBaseAdapterとRecyclerViewを(ViewHelperデザインパターンを使って)使用しています。3行後にtextviewの最後に "View More"を追加してダイアログに全文を表示する(ポップアップ)
public interface ViewMoreClickListener {
void viewMoreClicked(int index);
}
public void addViewMoreToTextView(final int position, final TextView tv, final String expandText, final int maxLine, final ViewMoreClickListener listener) {
try {
if (tv.getTag() == null) {
tv.setTag(tv.getText());
}
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
String text = tv.getText().toString();
if (tv.getLineCount() > maxLine) {
int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
text = text.subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
// We are rechecking in order to resolve issue with alignment problem
if (tv.getLineCount() > maxLine) {
lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
text = text.subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
}
tv.setMovementMethod(LinkMovementMethod.getInstance());
String str = Html.fromHtml(text).toString();
SpannableStringBuilder ssb = new SpannableStringBuilder(Html.fromHtml(text));
if (str.contains(expandText)) {
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
if (listener != null)
listener.viewMoreClicked(position);
}
}, str.indexOf(expandText), str.indexOf(expandText) + expandText.length(), 0);
}
tv.setText(ssb);
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public class SampleActivity extends BaseActivity implements ViewMoreClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void viewMoreClicked(int index) {
// here we will show full text in pop up or custom dialog by getting from arraylist based on index.
}
}
そして、上記のメソッドをアダプタのgetView()から呼び出しています。
addViewMoreToTextView(position, textview, "..more", 3, listener);
私はこれらのリンクを徹底的に守りましたが、RecyclerViewでも動作していません。
Set Text View ellipsize and add view more at end
Add "View More" at the end of textview after 3 lines
この問題を解決するために私を助けてください。私はコードの下に使用してこの問題を解決した
は、[この回答](https://stackoverflow.com/a/18667717/4168607)を見てみましょう。私はこれがあなたが必要とするものだと思います。 – ADM
@ADMご回答いただきありがとうございます。私はそのリンクを通過しましたが、そこにはないに基づいてトリミングテキストがあります。しかし、我々はnoに基づいて必要とする。ラインの。私はそれが私の必要条件を満たさないと思う。私のコードは、オリエンテーションを変えて、RecyclerViewでのみ動作しています。 –