Это может быть достигнуто несколькими способами. Но сначала, чтобы настроить диалог более, вам нужно использовать класс AlertDialog.Builder
* до , чтобы создать собственный диалог . Это может быть заполнено вашими собственными View
с.
Вот три способа архивирования выбранного текста:
Использование Android 3.0 +
Начиная с API-уровня 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
Поскольку на самом деле не существует простого способа сделать текст из TextView
выбираемым в версиях Android до 3.0, вы можете использовать EditText
(с текстом по умолчанию для выбора) и сделать его похожим на TextView
.
Для этого требуется некоторый XML-макет (чтобы получить стиль 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();
К результату могут быть добавлены некоторые настройки и конфетка;)
Надеюсь, это даст вам представление о том, как вы можете решить эту задачу. Уже поздно, пора спать.