其他分享
首页 > 其他分享> > 从Android AlertDialog复制文本?

从Android AlertDialog复制文本?

作者:互联网

是否有任何方法可以在Android中将文本设置为“可选”或“可复制”?或者我是否必须使用其他一些小部件而不是AlertDialog?

解决方法:

这可以通过几种方式实现.但首先,要更多地自定义对话框,您需要使用AlertDialog.Builder-classcreate your custom dialog.然后可以使用您自己的视图填充它.

以下是有关如何归档可选文本的三种方法:

使用Android 3.0

从API-Level 11(Android 3.0)开始,TextView有一个名为setTextIsSelectable()的方法,它几乎就像我通过黑客攻击所获得的那样,如下所述.

// The TextView to show your Text
TextView showText = new TextView(this);
showText.setText("Some selectable text goes here.");
showText.setTextIsSelectable(true);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Build the Dialog
builder.setView(showText)
       .setTitle("Selectable text")
       .setCancelable(true)
       .show();

这个解决方案的问题是,它只适用于运行Android 3.0及更高版本的设备,而其他两个解决方案也适用于Android 1.5(我使用Android 2.2).

复制到剪贴板

由于标记文本的目的是(大部分时间)复制它,您只需将onLongClickListener或简单的onClickListener(您最喜欢的那个)添加到TextView,并将其显示的文本复制到系统的剪贴板.

这个小插图:

// Get our tools
AlertDialog dialog;
AlertDialog.Builder builder;
// The TextView to show your Text
TextView showText = new TextView(this);
showText.setText("Some selectable text goes here.");
// Add the Listener
showText.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        // Copy the Text to the clipboard
        ClipboardManager manager = 
            (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        TextView showTextParam = (TextView) v;
        manager.setText( showTextParam.getText() );
        // Show a message:
        Toast.makeText(v.getContext(), "Text in clipboard",
                Toast.LENGTH_SHORT)
        .show();
        return true;
    }
});
// Build the Dialog
builder = new AlertDialog.Builder(this);
builder.setView(showText);
dialog = builder.create();
// Some eye-candy
dialog.setTitle("Selectable text");
dialog.setCancelable(true);
dialog.show();

此示例将复制系统剪贴板中的所有显示文本.

使EditText看起来像TextView

由于没有真正简单的方法可以在3.0之前的Android版本上选择TextView的Text,您可以使用EditText(默认情况下具有可选文本)并使其看起来像TextView.

这需要一些XML-Layout(以获得TextView的样式),但可能会让您获得最原生的外观和感觉:

XML部分:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- Make the EditText look like a TextView -->
    <EditText android:id="@+id/showText"
        style="?android:attr/textViewStyle"
        android:background="@null"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Java部分:

// Get our tools
AlertDialog dialog;
AlertDialog.Builder builder;
// The EditText to show your Text
LayoutInflater inflater = 
    (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.dialog,
        (ViewGroup) this.findViewById(R.id.showText));
EditText showText = (EditText) layout.findViewById(R.id.showText);
showText.setText("Some selectable text goes here.");
// Build the Dialog
builder = new AlertDialog.Builder(this);
builder.setView(layout);
dialog = builder.create();
// Some eye-candy
dialog.setTitle("Selectable text");
dialog.setCancelable(true);
dialog.show();

一些自定义和眼睛可能会添加到结果中;)

我希望这能让您了解如何完成这项任务.现在已经很晚了,是时候睡觉了.

标签:android-alertdialog,android
来源: https://codeday.me/bug/20191006/1861350.html