Android에서 TextView에 대한 표준 복사 붙여 넣기를 활성화하려면 어떻게해야합니까?


119

TextView에 대한 표준 복사 붙여 넣기를 활성화하고 싶습니다 (EditText와 동일). 내가 어떻게 해?

편집 할 수없는 EditText를 사용해 보았지만 제대로 작동하지 않았습니다 (가끔 편집 가능해 지거나 복사 붙여 넣기 오버레이가 표시되지 않음). 그리고 일반적으로 좋은 접근 방식은 아닐 것입니다.

API 7부터 작동하는 솔루션이 필요합니다.


인가 이것은 당신이 찾고있는 무엇?
Jermin Bazazian 2015

비슷하지만 모든 텍스트를 복사하고 싶기 때문에 동일하지는 않습니다. 하지만 똑같아 보입니다. 문제는 거기에 대한 대답이 API 11부터 작동하고 API 7에서 작동하는 것이 필요하다는 것입니다.
Ixx

ClipboardManagerAPI 1부터 사용할 수 있습니다 ( 여기 참조 ). 클립 보드에 복사 할 팝업과 함께 길게 누르면 어떨까요?
Jermin Bazazian 2012

@Jermin 예, 맞춤 솔루션을 만들어야하는 것 같습니다.
Ixx

답변:


226

시도해보십시오 android:textIsSelectable.

즉, android:textIsSelectable="true"


EditTextPreference를 위해 할 수 있습니까?
powder366 2013-03-09

1
@ powder366 : EditTextPreference이미 복사 / 붙여 넣기를 지원 한다고 생각합니다 . 확실히 설정 앱에있는 것 같습니다.
CommonsWare 2013 년

사실 버그 인 것 같습니다. 내 삼성 4.2.2 장치에 표시됩니다. Nexus7 및 Nexus10이 작동합니다. code.google.com/p/android/issues/detail?id=26008
powder366 2013 년

참고로 텍스트보기가 처음에 숨겨져 있고 setVisibility를 사용하여 프로그래밍 방식으로 표시하는 경우 textView.setTextIsSelectable (true)을 사용하여이 작업을 수행해야합니다. 이 경우 xml을 통해 작동하지 않습니다.
Praveen Singh

58

TextView에 대한 표준 복사 / 붙여 넣기를 활성화하려면 U는 다음 중 하나를 선택할 수 있습니다.

  1. 레이아웃 파일 변경 : TextView에 아래 속성 추가

    android:textIsSelectable="true"

  2. Java 클래스에서이 행을 작성하여 프로그래밍 방식으로 설정하십시오. myTextView.setTextIsSelectable(true);

TextView를 길게 누르면 복사 / 붙여 넣기 작업 표시 줄을 볼 수 있습니다.


1
나는 그렇게한다. 텍스트를 클릭하면 "복사"및 "선택"버튼이있는 도구 모음이 열립니다. 하지만 클릭해도 아무 일도 일어나지 않습니다. 어떡해?
Mina Dahesh

2
이 솔루션은 녹색 확인 표시가있는 올바른 솔루션보다 낫습니다.
Adam Hurwitz

21

이것은 Honeycomb 이전 복사에서 작동합니다.

import android.text.ClipboardManager;

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
        cm.setText(textView.getText());
        Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
    }
});

4
좋은 전략은 CommonsWare의 답변과 함께 이것을 사용하는 것입니다. android:textIsSelectable레이아웃에 생명을 추가하기 때문에 낮은 API 수준에서는 무시됩니다. 그런 다음 API 수준이 11 미만인지 확인하는 if 문 내에서 Ixx의 솔루션을 사용합니다. 좋은 점은 android:textIsSelectable플랫폼의 텍스트 선택 작업 표시 줄을 제공하고 네이티브 느낌이 좋다는 것입니다.
emil10001

1
ClipboardManager 유형의 setText (CharSequence) 메소드는 더 이상 사용되지 않습니다
S.M_Emamian

1
예,이 답변은 2 년 전의 것입니다. 자유롭게 편집하거나 새로 추가하십시오.
Ixx

11

API 11 필요 , 업데이트 된 코드, 이전 방법은 더 이상 사용되지 않음

없는 테마 전체 화면 솔루션 ActionBar

확장 TextView및 생성자에서 다음 코드 붙여 넣기

this.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData cData = ClipData.newPlainText("text", getText());
                cManager.setPrimaryClip(cData);
                Util.toast(mContext, string.text_copyed);
                return true;
            }
        });

9

xml textview 에서이 코드를 붙여 넣으십시오.

android:textIsSelectable="true"

그런 다음 Java 파일에서

 final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
    txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
        @Override
        public void onClick(View view) {
            ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
            cm.setText(txtcopypaste.getText().toString());              
            Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
        }
    });

요구 사항 : 텍스트보기에있는 텍스트를 복사하여 붙여 넣어야합니다.

결과 : textview 사용, 일단 textview를 클릭했습니다. textview에있는 텍스트를 자동으로 복사합니다.

참고 : 클립 보드 관리자를 가져 오는 동안 선호하는

텍스트 클립 보드 관리자를 선호하세요

import android.text.ClipboardManager; // prefer this 

콘텐츠 클립 보드 관리자를 피하십시오

import android.content.ClipboardManager; // Not this

3
  1. 테마 사용

    @android:style/Theme.Black.NoTitleBar.Fullscreen

    또는

    @android:style/Theme.WithActionBar
  2. xml에서 TextView 설정

    android:textIsSelectable="true"
  3. 참조 결과를


3

누군가 추가 마일을 사용하고 한 번의 클릭으로 선택하고 클립 보드에 복사하려면 다음을 수행하십시오.

 phone.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                            ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
                            clipboard.setPrimaryClip(clip);

                        }
                    });

phone은 TextView이고 phone.Text는 클립 보드에 복사 할 텍스트입니다.


0

이것이 더 좋습니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
final android.content.ClipData clipData = android.content.ClipData
        .newPlainText("text label", "text to clip");
clipboardManager.setPrimaryClip(clipData);
} else {
final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText("text to clip");
}

-2

의 경우 EditText활동 내부 매니페스트에서 android:windowSoftInputMode="adjustResize"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.