একটি পাঠ্য ভিউতে টেক্সট অনুলিপি নির্বাচন করবেন?


106

ব্যবহারকারীকে কোনও পাঠ্য ভিউতে টেক্সট নির্বাচন / অনুলিপি করার অনুমতি দেওয়ার কোনও উপায় আছে কি? আমার এডিটেক্সট এর একই কার্যকারিতাটি দরকার যেখানে আপনি নিয়ন্ত্রণটি দীর্ঘ-টিপুন এবং সমস্ত / অনুলিপি নির্বাচনের পপআপ বিকল্পগুলি পেতে পারেন তবে আমার কাছে টেক্সটভিউয়ের মতো দেখতে নিয়ন্ত্রণ দরকার।

সম্পাদনাযোগ্য "" কিছুই নয় "বিকল্প বা ইনপুট টাইপ =" কিছুই নয় "ব্যবহার করার মতো কয়েকটি জিনিস চেষ্টা করে দেখেছি, তবে এগুলি এখনও সম্পাদনা পাঠ্যের ফ্রেমযুক্ত পটভূমি ধরে রেখেছে, যা আমি চাই না,

ধন্যবাদ

------- হালনাগাদ ----------------------

এটি সেখানে 99%, কেবলমাত্র আমি চাই নির্বাচনের হাইলাইটটি দৃশ্যমান হওয়ার জন্য (কমলা রঙের জিনিস)। এটির চেয়ে ভাল এটি ছাড়াও এই সাথে থাকতে পারত:

<EditText 
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:editable="false"
  style="?android:attr/textViewStyle"
  android:textColor="@color/white"
  android:textAppearance="@android:style/TextAppearance.Medium"
  android:cursorVisible="false"
  android:background="@null" />

আমি অনুমান করি কার্সরভিজিবল = "মিথ্যা" কারণেই এটি ঘটছে তবে এটি ছাড়া কার্সারটি কোনও নির্বাচন না করেও উপস্থিত রয়েছে।


বিকল্পটি পাঠ্য প্রদর্শন করার জন্য একটি টেক্সটভিউয়ের পরিবর্তে ওয়েবভিউ ব্যবহার করা হবে।
আলেব


উত্তর:


221

অ্যান্ড্রয়েড: টেক্সটআইসিলিটেবল কাজগুলি (কমপক্ষে আইসিএসে - আমি এখনও পূর্ববর্তী সংস্করণগুলিতে চেক করিনি)

<TextView
    android:id="@+id/deviceIdTV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textIsSelectable="true"
    android:text="" />

15
এপিআই স্তর 11 এবং কেবলমাত্র
থিয়েরি-দিমিত্রি রায়

10
তবে কপি করবেন কীভাবে? আমি পাঠ্যটি হাইলাইট করতে পারি, তবে কোনও অনুলিপি মেনু প্রদর্শিত হয়নি।
বাগশুফায়ার

1
আপনি যখন কার্সারগুলিতে ঝাঁকুনি দিচ্ছেন তখন এটি ক্রাশ ঘটায় না।
শুভম

1
এটিকে কীভাবে তালিকার দৃষ্টান্তে কাজ করবেন তা আমাকে জানাতে পারেন?
রমেশ কুমার

সুন্দর, এমনকি ডিফল্ট অনুলিপি মেনুটি সরঞ্জামদণ্ডে তৈরি হয়েছে
ফরিদ

56

পাঠ্য দর্শনকে সক্ষম, ফোকাসযোগ্য, দীর্ঘ ক্লিকযোগ্য এবং পাঠ্য আইসিসিলেটেবলের দরকার

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:id="@+id/pwTextView"
    android:enabled="true"
    android:textIsSelectable="true"
    android:focusable="true"
    android:longClickable="true" />

1
এটিই সেরা সমাধান।
সাহসী

9
কেন textIsSelectableপর্যাপ্ত নয়? এটি কেবল এই বিকল্পটি
নিয়েই

4
অথবা আপনি textview.setTextIsSelectable(true)কোড জাভা কোড ব্যবহার করতে পারেন ।
বেরিচ্যাক্স 14:25 '

1
শুধু ব্যবহার textIsSelectableisআমার জন্য কাজ
crgarridos

1
একরকম, textIsSelectableকিছু ক্ষেত্রে কাজ করে, তবে অন্যদের জন্য নয়। কখনও কখনও, একই লেআউটটি সর্বদা কেবল পাঠ্যখচিত নির্বাচনযোগ্য নয় তবে একটি ভিন্ন পাঠ্য নিয়ে কাজ করে। তবে, এই সমাধানটিকে এটি আরও ভালভাবে কাজ করে না বলে মনে হয় না, তাই সমস্যাটি অন্য কোথাও থেকে আসতে পারে।
সাইমন নিনন

23

আমি মনে করি আমার আরও ভাল সমাধান আছে। শুধু কল
registerForContextMenu(yourTextView);

এবং আপনার TextViewপ্রসঙ্গ মেনু ইভেন্টগুলি পাওয়ার জন্য নিবন্ধিত হবে।

তারপরে onCreateContextMenuআপনার মধ্যে ওভাররাইড করুনActivity

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    //user has long pressed your TextView
    menu.add(0, v.getId(), 0, "text that you want to show in the context menu - I use simply Copy");

    //cast the received View to TextView so that you can get its text
    TextView yourTextView = (TextView) v;

    //place your TextView's text in clipboard
    ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
    clipboard.setText(yourTextView.getText());
}

আশা করি এটি আপনাকে এবং অন্য যে কোনও একটি থেকে টেক্সট অনুলিপি করার উপায় অনুসন্ধান করতে সহায়তা করে TextView


এটি কোন পাঠ্য বিট অনুলিপি করা হয়েছে তা নির্বাচন করতে ব্যবহারকারীকে কোথায় অনুমতি দেয়? এটি কি সব কিছু অনুলিপি করে না, যা মূল প্রশ্ন নয়?
জেমস মুর

4
এটি সম্ভবত লক্ষ্য করা ভাল যে এটি মেনু থেকে "অনুলিপি" নির্বাচন করে কিনা তা নির্বিশেষে এই লেখাটি তত্ক্ষণাত অনুলিপি করে তোলে। উপযুক্ত আইটেমটি কেবল তখনই অনুলিপি করার জন্য আপনাকে onContextItemSelected () পাশাপাশি ওভাররাইড করতে হবে বা মেনু আইটেমটিতে একটি ক্লিক হ্যান্ডলার যুক্ত করতে হবে।
ফয়সাল

ClipboardManager.setText(CharSequence text)এপিআই লেভেল ১১-এ অবমুক্ত করা হয়েছিল তার setPrimaryClip(ClipData)পরিবর্তে ব্যবহার করুন। এটি প্রদত্ত পাঠ্যকে ধারণ করে একটি ক্লিপড আইটেম তৈরি করে এবং এটি প্রাথমিক ক্লিপ হিসাবে সেট করে। এটির কোনও লেবেল বা আইকন নেই। অনুলিপি-পেস্ট সম্পর্কে ভাল পঠন: লিঙ্ক
মেরিলিয়া

আমি পাঠ্য নির্বাচনের পরে ডায়লগ খুলতে চাই। সুতরাং আপনি কি এর জন্য কোনও পরামর্শ সরবরাহ করতে পারেন?
আনন্দ সাবজনী

9
textview1.setTextIsSelectable(true);

এটি ব্যবহারকারীকে দীর্ঘ ক্লিক করতে বা আমরা সাধারণত যেমন পাঠ্য নির্বাচন করতে এবং অনুলিপি করতে সক্ষম করে


6

আমি একই বাস্তবায়নের চেষ্টা করছি এবং আপনার প্রশ্ন আমাকে আমার এডিটেক্সট লেআউটটি সঠিকভাবে সেট করতে সহায়তা করেছে। সূতরাং ধন্যবাদ! :)

তখন আমি বুঝতে পারি, কার্সার চালু থাকলে হাইলাইটটি আসলে দৃশ্যমান হবে। তবে আমি ঠিক যেমন আপনি পাঠ্যে দীর্ঘ ক্লিক করার আগে কার্সারটি দেখতে চান না, তাই আমি আপনার মতো লেআউট.এক্সএমএল ফাইলে কার্সারটি আড়াল করে রেখেছি এবং দীর্ঘ ক্লিকের জন্য একটি ইভেন্টলিস্টার যুক্ত করেছি এবং কেবলমাত্র একটি নির্বাচন শুরু হলেই কার্সারটি প্রদর্শন করা হয় ।

সুতরাং শ্রোতাদের আপনার ক্রিয়াকলাপে অনক্রিট বিভাগে যুক্ত করুন:

public TextView htmltextview;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ...

    htmltextview.setOnLongClickListener(new OnLongClickListener(){

        public boolean onLongClick(View v) {
            htmltextview.setCursorVisible(true);
            return false;
        }
    });

}

এবং ভয়েল, শুরুতে কোনও কার্সার নেই এবং আপনি দীর্ঘ-ক্লিক করলে কার্সারটি নির্বাচনের সীমানার সাথে উপস্থিত হয়।

আমি সাহায্য করতে পারে আশা করি।

চিয়ার্স, এফএম


5

আমিও অনুরূপ কিছু করার চেষ্টা করছিলাম তবে এখনও টেক্সটভিউতে পাঠ্য হাইলাইট করার কৌশল নিয়ে কাস্টম পদ্ধতির দরকার ছিল। আমি হাইলাইট ট্রিগার এবং LongClickক্রিয়ায় অনুলিপি ।

এইভাবে আমি ব্যবহার করে পরিচালনা করেছি SpannableString:

SpannableString highlightString = new SpannableString(textView.getText());
highlightString.setSpan(new BackgroundColorSpan(ContextCompat.getColor(getActivity(), R.color.gray))
            , 0, textView.getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(highlightString);
copyToClipboard(urlToShare);

এবং অনুলিপি ফাংশন:

public void copyToClipboard(String copyText) {
    ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clip = ClipData.newPlainText("url", copyText);
    clipboard.setPrimaryClip(clip);
    Toast toast = Toast.makeText(getActivity(), "Link is copied", Toast.LENGTH_SHORT);
    toast.show();
}

আমি আশা করি যে এই প্রশ্নের শেষ পর্যন্ত কারও পক্ষে এটি সহায়ক হবে :)


4

প্রোগ্রামিংয়ে কোটলিন ব্যবহার করে (ম্যানুয়াল অনুলিপি)

button.setTextIsSelectable(true)

অথবা, একটি কোটলিন সম্পত্তি এক্সটেনশন যুক্ত করুন

var TextView.selectable
    get() = isTextSelectable
    set(value) = setTextIsSelectable(value)

তারপরে ফোন করুন

textview.selectable = true
// or
if (textview.selectable) { ...

প্রোগ্রামিংয়ে কোটলিন ব্যবহার করে (স্বতঃ-অনুলিপি)

আপনি যখন ব্যবহারকারী দীর্ঘ-টিপুন দেখেন আপনি যদি অটো-অনুলিপি করতে চান, তবে এটির বেস কোডটি প্রয়োজনীয়:

myView.setOnLongClickListener {  
    val clipboardManager = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
    val clip = ClipData.newPlainText("Copied String", myString)
    clipboardManager.setPrimaryClip(clip)
    true // Or false if not consumed
}

Toastএটি ঘটেছে তা নিশ্চিত করতে আপনি একটি যুক্ত করতে চাইতে পারেন

অথবা, একটি কোটলিন এক্সটেনশন ফাংশন যুক্ত করুন

myView.copyOnHold() // pass custom string to not use view contents

fun TextView.copyOnHold(customText: String? = null) {
    setOnLongClickListener {
        val clipboardManager = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
        val clip = ClipData.newPlainText("Copied String", customText ?: text)
        clipboardManager.setPrimaryClip(clip)
        true // Or false if not consumed
    }
}

এক্সএমএল (ম্যানুয়াল অনুলিপি) ব্যবহার করে

এটি আপনার যুক্ত করুন <TextView>

android:textIsSelectable="true"

দ্রষ্টব্য: এইগুলির জন্য সমস্ত প্রয়োজন android:enabled="true"এবং android:focusable="true", যা একটি এর জন্য ডিফল্ট মান TextView


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