প্রোগ্রামটিমেটিকভাবে আমার অ্যান্ড্রয়েড অ্যাপে কীভাবে টেক্সট অনুলিপি করবেন?


231

আমি একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করছি এবং আমি একটি সম্পাদনা পাঠ্য উইজেটের পাঠ্য মানটি অনুলিপি করতে চাই। ব্যবহারকারীর পক্ষে Menu+Aতখন Menu+Cমানটি অনুলিপি করার জন্য টিপানো সম্ভব , তবে আমি কীভাবে এই প্রোগ্রামটি করব?



এই মূলত একটি সদৃশ প্রশ্ন হল stackoverflow.com/a/13517876/2116185
user2116185

উত্তর:


419

ClipboardManager#setPrimaryClipপদ্ধতি ব্যবহার করুন :

import android.content.ClipboardManager;

// ...

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

ClipboardManager এপিআই রেফারেন্স


7
ব্যবহারimport android.content.ClipboardManager;
ম্যাথিউজার্ডিমবি

এই ফাংশনটি এপিআই 11+ (ললিপপ সহ) এ কাজ করে বা না?
আশরাফ আলশাহায়ে

22
কী label?
আলা এম।

ক্লিপ ট্রেটি প্রদর্শন না করে এটি করার কোনও উপায় আছে কি ? (LG G4S 5.1.1)
আলা এম।

2
আপনি অনুলিপিটির পরে সাফল্যের বার্তা যুক্ত করতে পারেন যে ব্যবহারকারীকে লেখাটি অনুলিপি করা হয়েছেContext context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
শ্যাডি শেরিফ

217

সুতরাং এটি কীভাবে করা উচিত তা নিয়ে সকলেই একমত, তবে যেহেতু কেউই সম্পূর্ণ সমাধান দিতে চান না, তাই এখানে যান:

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
    android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    clipboard.setText("text to clip");
} else {
    android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
    android.content.ClipData clip = android.content.ClipData.newPlainText("text label","text to clip");
    clipboard.setPrimaryClip(clip);
}

আমি ধরে নিলাম আপনার কাছে ম্যানিফেস্টে ঘোষণা করার মতো কিছু রয়েছে:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />

এটি কাজ করে না, কারণ সংকলকটিতে ত্রুটি ছুঁড়েছে: কলটির জন্য এপিআই লেভেল 11 প্রয়োজন (বর্তমান মিনিট 7): android.content.ClipboardManager # setPrimaryClip লাইন 245 অ্যান্ড্রয়েড লিন্ট সমস্যা।
জাভাআরনার

2
আপনি কি আপনার প্রকাশ্যে লক্ষ্য এবং মিনিট এসডিকে যুক্ত করেছেন? যদি হ্যাঁ লিন্টের সতর্কতাটি অক্ষম করুন।
ওয়ারপজিট

4
আপনার পদ্ধতির উপরে নিম্নলিখিত 3 টি লাইন যুক্ত করুন @ সাপ্রেসলিন্ট ({"নিউএপিপি", "নিউএপিপি", "নিউএপিপি", "নিউএপিপি"}), @ সুপ্রেস ওয়ার্নিংস ("অবচয়"), @ টার্গেটএপিআই (11) ........ .আমি যা করেছি তা কাজ করে এবং তা কার্যকর হয়।
আরআরটিডব্লিউ

2
দয়া করে কেউ কি বলতে পারবেন ঠিক ব্যবহার কি labelমধ্যে newPlainTextপদ্ধতি? দস্তাবেজটি বলে label User-visible label for the clip data.। কিন্তু কবে labelব্যবহারকারীর কাছে দৃশ্যমান? এবং আমি কোন ধরণের মান / নাম রাখা উচিত label?
shadyinside

@ ট্যাননারজাহান আমার অনুমান যে এটি কোনও ধরণের পূর্বরূপ যা কোথাও ব্যবহৃত হয়। তবে কোথায় জানি না। তবে আপনি কেবল একই পাঠ্য দু'বার ব্যবহার করতে পারেন ...
ওয়ার্পজিট

15

গুগলিং আপনাকে অ্যান্ড্রয়েড.কন্টেন্ট.স্লিপবোর্ড ম্যানেজারে নিয়ে আসে এবং আপনি সিদ্ধান্ত নিতে পারেন, আমি যেমন করেছিলাম যে ক্লিপবোর্ড এপিআই <11 এ উপলব্ধ নয়, কারণ ডকুমেন্টেশন পৃষ্ঠাটিতে "যেহেতু: এপিআই লেভেল 11" বলা হয়েছে।

প্রকৃতপক্ষে দুটি শ্রেণি রয়েছে, দ্বিতীয়টি প্রথমটি প্রসারিত করে - android.text.ClipboardManager এবং android.content.ClipboardManager।

android.text.ClipboardManager এআইপিআই 1 সাল থেকে বিদ্যমান তবে এটি কেবল পাঠ্য সামগ্রীতেই কাজ করে।

অ্যান্ড্রয়েড.কন্টেন্ট.স্লিপবোর্ড ম্যানেজার ক্লিপবোর্ডের সাথে কাজ করার পছন্দের উপায়, তবে এটি এপিআই লেভেল <11 (হানিকম্ব) এ উপলব্ধ নয়।

এগুলির যে কোনও একটি পেতে আপনার নিম্নলিখিত কোডের প্রয়োজন:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

তবে API <11 এর জন্য আপনাকে আমদানি করতে হবে android.text.ClipboardManagerএবং API> = 11 এর জন্য 11 android.content.ClipboardManager


14
public void onClick (View v) 
{
    switch (v.getId())
    {
        case R.id.ButtonCopy:
            copyToClipBoard();
            break;
        case R.id.ButtonPaste:
            pasteFromClipBoard();
            break;
        default:
            Log.d(TAG, "OnClick: Unknown View Received!");
            break;
    }
}

// Copy EditCopy text to the ClipBoard
private void copyToClipBoard() 
{
    ClipboardManager clipMan = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    clipMan.setPrimaryClip(editCopy.getText());
}

আপনি এটি চেষ্টা করতে পারেন ..


8

এডিট টেক্সট থেকে কিছু অনুলিপি এবং পেস্ট ফাংশন প্রয়োগ করার জন্য এখানে কিছু কোড রয়েছে (সংস্করণ চেকের জন্য ওয়ারপজিটকে ধন্যবাদ)। এগুলি আপনি আপনার বোতামের অনক্লিক ইভেন্টে হুক করতে পারেন।

public void copy(View v) {      
    int startSelection = txtNotes.getSelectionStart();
    int endSelection = txtNotes.getSelectionEnd();      
    if ((txtNotes.getText() != null) && (endSelection > startSelection ))
    {
        String selectedText = txtNotes.getText().toString().substring(startSelection, endSelection);                
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
            android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
            clipboard.setText(selectedText);
        } else {
            android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
            android.content.ClipData clip = android.content.ClipData.newPlainText("WordKeeper",selectedText);
            clipboard.setPrimaryClip(clip);
        }
    }
}   

public void paste(View v) {
    int sdk = android.os.Build.VERSION.SDK_INT;
    if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboard.getText() != null) {
            txtNotes.getText().insert(txtNotes.getSelectionStart(), clipboard.getText());
        }
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        android.content.ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
        if (item.getText() != null) {
            txtNotes.getText().insert(txtNotes.getSelectionStart(), item.getText());
        }
    }
}

আপনার মতো করে লিখে না রেখে অ্যান্ড্রয়েডের অনুলিপি / পেস্ট / কাট পদ্ধতিগুলি কল করা কি সম্ভব নয়? ব্যবহারকারী একটি নির্বাচিত পাঠ্যকে সাহসী / ইটালিক / আন্ডারলাইন ইত্যাদি তৈরি করতে সক্ষম হবার জন্য কার্যকারিতা সহ আমি একটি কাস্টম পাঠ্য-নির্বাচন সরঞ্জামদণ্ড তৈরি করেছি তবে কাস্টমাইজেশনের পরে, ডিফল্ট ফাংশনগুলি অনুলিপি / পেস্ট / কাট কাজ করে না, তবে আইকনগুলির জন্য তাদের এখনও প্রদর্শিত হয়?

"ওয়ার্ডকিপার" কিসের জন্য?
অ্যান্ড্রয়েড বিকাশকারী

7

অ্যান্ড্রয়েড সমর্থন লাইব্রেরি আপডেট

অ্যান্ড্রয়েড ওরিও হিসাবে, সমর্থন লাইব্রেরিটি কেবল এপিআই 14 এ চলে গেছে Most প্রচুর কোড সাফ করা যায়। (তবে আপনি যদি এখনও নিম্ন সংস্করণকে সমর্থন করছেন তবে আমার সম্পাদনার ইতিহাস দেখুন))

কপি

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);

আটকে দিন

আমি এই কোডটি বোনাস হিসাবে যুক্ত করছি, কারণ অনুলিপি / পেস্টটি সাধারণত জোড়া হয়ে থাকে।

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
    CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
    return;
}

মন্তব্য

  • android.content.ClipboardManagerপুরানোের চেয়ে সংস্করণটি আমদানি করতে ভুলবেন না android.text.ClipboardManager। একই জন্য ClipData
  • আপনি যদি কোনও কার্যকলাপে না থাকেন তবে আপনি পরিষেবাটি পেতে পারেন context.getSystemService()
  • আমি পেস্টের পাঠ্য পেতে একটি চেষ্টা / ক্যাচ ব্লক ব্যবহার করেছি কারণ একাধিক জিনিস হতে পারে null। আপনি যদি সেভাবে আরও পঠনযোগ্য দেখতে পান তবে আপনি প্রত্যেকে পরীক্ষা করতে পারেন।

1
"টেক্সট লেবেল" কিসের জন্য?
অ্যান্ড্রয়েড বিকাশকারী

@ অ্যান্ড্রয়েড ডেভেলপার, আমি আসলে কখনও কোনও কিছুর জন্য লেবেল ব্যবহার করি নি, তবে এই প্রশ্নোত্তর দেখুন ।
সুরগাচ

সুতরাং এটি এটি ব্যবহারকারীদের কাছে দৃশ্যমান বলার পরেও এটি আসলে তা নয় এবং প্রয়োজনে এটি বিকাশকারীদের উপর এটি নির্ভর করে।
অ্যান্ড্রয়েড বিকাশকারী

5

টেক্সটভিউয়ের জন্য মানক অনুলিপি / পেস্ট সক্ষম করতে, আপনি নিম্নলিখিতগুলির মধ্যে একটি চয়ন করতে পারেন:

বিন্যাস ফাইলে পরিবর্তন করুন: নীচে আপনার পাঠ্য ভিউতে সম্পত্তি যুক্ত করুন

android:textIsSelectable="true"

আপনার জাভা ক্লাসে এই লাইনটি ব্যাকরণগতভাবে দুটি সেট করুন।

myTextView.setTextIsSelectable(true);

এবং টেক্সটভিউতে দীর্ঘক্ষণ চাপুন আপনি অনুলিপি / পেস্টের অ্যাকশন বার দেখতে পারেন।


5
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
if (clipboard == null || clip == null)
    return;
clipboard.setPrimaryClip(clip);

এবং আমদানি import android.content.ClipboardManager;


3

@ ফ্লাইওয়াত ইতিমধ্যে সঠিক উত্তর দিয়েছেন, আমি কেবল সম্পূর্ণ উত্তরটি ভাগ করছি:

ক্লিপবোর্ডে ম্যানেজ.সেটপ্রাইমারি ক্লিপ ( http://developer.android.com/references/android/content/ClipboardManager.html ) পদ্ধতিটি ব্যবহার করুন :

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip); 

label ক্লিপ ডেটার জন্য ব্যবহারকারী-দৃশ্যমান লেবেল কোথায় এবং ক্লিপটির textআসল পাঠ্য। মতে সরকারী দস্তাবেজ

এই আমদানিটি ব্যবহার করা গুরুত্বপূর্ণ:

import android.content.ClipboardManager;

আপনি কেন পেস্ট উত্তর অনুলিপি? লেবেল কি?
অ্যালেক্স

@ অ্যালেক্স যেমন বলেছিলাম, ইতিমধ্যে অন্য বন্ধুটি একটি সঠিক উত্তর দিয়েছে, আমি আরও বিশদ সহ আরও একটি উপায় পোস্ট করছি, আমি মনে করি এটি কারওর পক্ষে কার্যকর হবে
ট্রিনিটি

1

এখানে আমার কাজের কোড

/**
 * Method to code text in clip board
 *
 * @param context context
 * @param text    text what wan to copy in clipboard
 * @param label   label what want to copied
 */
public static void copyCodeInClipBoard(Context context, String text, String label) {
    if (context != null) {
        ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText(label, text);
        if (clipboard == null || clip == null)
            return;
        clipboard.setPrimaryClip(clip);

    }
}

আপনি যখন একটি কোড ভাগ করেছেন, তখন এটি ব্যাখ্যা করার চেষ্টা করুন। আপনি পরিদর্শন করতে পারেন এবং কোনও প্রশ্নের উত্তর কীভাবে তা পরীক্ষা করতে পারেন ।
ইউনুস টেমুরলেঙ্ক

@ ইউনূস টিমুরলেঙ্ক আপনার পরামর্শের জন্য ধন্যবাদ, পরের বার আমি আমার বিবরণ দিয়ে একটি বিবরণ সম্পাদনা করব
মেহুল বোঘরা

1

কোটলিনের জন্য, আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারি। আপনি এই পদ্ধতিটি কোনও ক্রিয়াকলাপ বা খণ্ডের মধ্যে আটকে দিতে পারেন।

fun copyToClipBoard(context: Context, message: String) {

    val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clipData = ClipData.newPlainText("label",message)
    clipBoard.setPrimaryClip(clipData)

}

ধন্যবাদ! context.হতে পারে কারণ আমি এটা একটি টুকরা মধ্যে করছি - পার্ট আমি অনুপস্থিত ছিল ছিল।
কুলুব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.