从Android AlertDialog复制文本?

有没有办法使AlertDialog的文本在AlertDialog “可选”或“可复制”? 或者我必须使用一些其他的部件,而不是AlertDialog

Solutions Collecting From Web of "从Android AlertDialog复制文本?"

这可以通过几种方式实现。 但是,首先,要更多地自定义对话框,您需要使用AlertDialog.Builder类来创build自定义对话框 。 这可以由您自己的View填充。

以下是如何将可选文本存档的三种方法:

使用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(); 

这个解决scheme的问题是,它只能在运行Android 3.0和更高版本的设备上运行,而另外两个解决scheme也会在Android 1.5(我使用Android 2.2)上运行。

复制到剪贴板

由于标记文本的目的是(大部分时间)复制它,所以您可以简单地将一个onLongClickListener或一个简单的onLongClickListener (您最喜欢的那个)添加到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版本上selectTextView的文本,所以可以使用EditText (默认情况下具有可选文本),并使其看起来像TextView

这需要一些XML布局(以获得TextView的风格),但可能会给你最原生的外观和感觉:

XML-Part:

 <?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-Part:

 // 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(); 

一些自定义和eye-candy可能被添加到结果;)

我希望这给你一个你如何能够完成这个任务的想法。 现在已经很晚了,睡觉了。

你可以在你的AlertDialog中放置一个EditText。 如果你不想让它看起来像在那里有一个文本框,你可以像AlertDialog的背景一样将其设置为混合。

http://developer.android.com/guide/topics/ui/dialogs.html

希望这有助于,如果没有,我可以尝试提供其他解决方法。

这有点冒失,因为它假设你知道默认AlertDialog布局(请参阅哪里可以find默认的AlertDialog布局xml文件? ),但是如果你想这样做,你可以做以下事情:

  alertDialog.show(); try { TextView textView = (TextView)dialog.getWindow().getDecorView().findViewById(android.R.id.message); textView.setTextIsSelectable(true); } catch(Exception e) { // Oups! }