অ্যান্ড্রয়েডে পাসওয়ার্ডের ইঙ্গিত ফন্ট


255

যখন একটি সম্পাদনা পাঠ্য পাসওয়ার্ড মোডে থাকে, মনে হয় ইঙ্গিতটি অন্য কোনও ফন্টে দেখানো হয় (কুরিয়ার?) আমি কীভাবে এড়াতে পারি? আমি ইঙ্গিতটি একই ফন্টে উপস্থিত হতে চাইবে যখন সম্পাদনা পাঠ্য পাসওয়ার্ড মোডে না থাকে।

আমার বর্তমান এক্সএমএল:

<EditText 
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:password="true"
android:singleLine="true" />

1
নোট করুন যে সমস্ত ডিভাইস এইভাবে আচরণ করে না। "এইচটিসি ওয়ান এক্স @ 4.1.1" (মোনস্পেস) করে। "স্যামসাং জিটি -7510 @ 4.0.4" দেয় না। (একই ফন্ট)
লোডা

1
LeWa OS 4.2.2 এ একই আচরণ। খুব বেমানান এপিআই ..
রুक्स


আপনি আমার উত্তর এখানে পরীক্ষা করতে পারেন আশা করি এটি কার্যকর হয়েছে
দিলিলা রাম

উত্তর:


394

এক্সএমএলে টাইপফেস পরিবর্তন করা আমার পক্ষে ইঙ্গিত পাঠ্যের উপরও কাজ করে না। আমি দুটি ভিন্ন সমাধান পেয়েছি, যার মধ্যে দ্বিতীয়টি আমার জন্য আরও ভাল আচরণ করেছে:

1) android:inputType="textPassword"আপনার এক্সএমএল ফাইল থেকে সরান এবং পরিবর্তে এটি জাভাতে সেট করুন:

EditText password = (EditText) findViewById(R.id.password_text);
password.setTransformationMethod(new PasswordTransformationMethod());

এই পদ্ধতির সাথে, হিন্ট ফন্টটি দেখতে দুর্দান্ত লাগছে তবে আপনি সেই সম্পাদনা ক্ষেত্রটিতে টাইপ করছেন, প্রতিটি অক্ষর একটি পাসওয়ার্ড ডটে পরিণত হওয়ার আগে আপনি সরল পাঠ্যে দেখতে পাবেন না। পূর্ণস্ক্রিনে ইনপুট তৈরি করার সময়, বিন্দু উপস্থিত হবে না, তবে পরিষ্কার লেখায় পাসওয়ার্ড।

2) android:inputType="textPassword"আপনার এক্সএমএল ছেড়ে দিন । জাভাতে, ALSO টাইপফেস এবং পাসওয়ার্ড মেথড সেট করে:

EditText password = (EditText) findViewById(R.id.register_password_text);
password.setTypeface(Typeface.DEFAULT);
password.setTransformationMethod(new PasswordTransformationMethod());

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

আশা করি এইটি কাজ করবে!


3
দুর্দান্ত, এটি কিছু অদ্ভুত আচরণ, আপনি ডিফল্ট থেকে আশা করবেন না!
স্যান্ডার ভার্স্লুয়েস

15
Is password.setTransformationMethod(new PasswordTransformationMethod());প্রয়োজনীয়? আমার জন্য ছাড়া ভাল কাজ করে মনে হচ্ছে।
loeschg

1
আমার দুটিও ব্যবহার করার দরকার নেই setTransformationMethod()। তবে এই পদ্ধতির কিছু পার্শ্ব-প্রতিক্রিয়া রয়েছে যা এটিকে অনাকাঙ্ক্ষিত করে তোলে কারণ এটি ডিফল্ট textPasswordআচরণের তুলনায় একটি মানহীন আচরণের ফলস্বরূপ । আরও সম্পূর্ণ সমাধানের জন্য, সহায়তা বর্গটি দেখুন: stackoverflow.com/a/17582092/231078
জো

10
এখনো ভালো, এই মহান সহজ অধিকার এই পৃষ্ঠায় একটি উত্তরে সমাধান তাকান: stackoverflow.com/a/18073897
মার্সিন Koziński

16
দয়া করে সতর্ক হন প্রথম সলিউশন ব্যবহার একটি খারাপ ধারণা হতে - ব্যবহারকারীদের আছে স্বয়ংক্রিয় পরামর্শ দিচ্ছি, অন্যান্য অ্যাপ্লিকেশন তাদের প্রস্তাব করা তাদের পাসওয়ার্ড এইজন্য শুরু হবে সক্রিয় কারণ editText হিসেবে ঘোষণা করা হয় নিinputType="textPassword"
Elad নব

193

ডায়ালগ গাইড থেকে এই দরকারী টিপটি পেয়েছি

টিপ: ডিফল্টরূপে, আপনি যখন "পাঠ্যপাঠর" ইনপুট প্রকারটি ব্যবহার করার জন্য একটি সম্পাদনা পাঠ্য উপাদান সেট করেন, ফন্ট পরিবারটি মোনস্পেসে সেট করা থাকে, সুতরাং আপনার ফন্টের পরিবারটিকে "সানস-সেরিফ" এ পরিবর্তন করা উচিত যাতে উভয় পাঠ্য ক্ষেত্র একটি মিলের ফন্ট ব্যবহার করে শৈলী।


উদাহরণ স্বরূপ

android:fontFamily="sans-serif"

21
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি সহজ এবং এটি ডক্স থেকে।
মার্সিন কোজিস্কি

29
এটি ভাল, ব্যতীত এটি কেবলমাত্র 16 স্তরের এবং তার উপরে API এর উপর কাজ করে
বেন ক্লেটন

6
মনে রাখবেন যে এটি কেবল মাত্র 16 ও ততোধিকের API পর্যায়ে কাজ করে, এক্সএমএল বৈশিষ্ট্যগুলি পুরানো ডিভাইসগুলিতে ক্র্যাশ ঘটায় না, সেগুলি কেবল এড়ানো হবে।
অ্যাডাম জনস

আপনি বেশ কয়েকবার পাসওয়ার্ড প্রদর্শন / গোপন করার জন্য ক্লিক করলে এটি কাজ করবে না
Ali Habbash

32

এই সমস্যাটি সমাধান করতে আমি এটিই করেছি। কোনও কারণে আমাকে রূপান্তর পদ্ধতিটি সেট করতে হয়নি তাই এটি আরও ভাল সমাধান হতে পারে:

আমার এক্সএমএলে:

<EditText
    android:id="@+id/password_edit_field"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Password"
    android:inputType="textPassword" />

আমার মধ্যে Activity:

EditText password = (EditText) findViewById( R.id.password_edit_field );
password.setTypeface( Typeface.DEFAULT );

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

2
অনুস্মারক: কোড দ্বারা ইনপুট টাইপ পরিবর্তন করার পরে কল সেটটাইপফেস () করুন। ইনপুট টাইপটিতে xx_VARIATION_PASSWORD অন্তর্ভুক্ত থাকলে সেট ট্রান্সফর্মেশনমিথডের প্রয়োজন হয় না;
লোডা

21

সেট ট্রান্সফর্মেশনমথড এপ্রোচটি অ্যান্ড্রয়েডের বিরতি দেয়: আমার জন্য imeOption, এবং ক্যারেজ রিটার্নকে পাসওয়ার্ড ক্ষেত্রে টাইপ করতে দেয়। পরিবর্তে আমি এটি করছি:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);

এবং অ্যান্ড্রয়েড সেট করছি না: এক্সএমএলে পাসওয়ার্ড = "সত্য"।


হ্যাঁ, এটি আমার জন্য 6.0.1
সালেও কাজ

5

মনীষা প্রদত্ত উত্তরটি কাজ করে তবে এটি ডিফল্টের তুলনায় পাসওয়ার্ড ক্ষেত্রটিকে একটি মানহীন অবস্থায় ফেলে দেয়। এটি হ'ল, ডিফল্ট ফন্টফেসটি তখন ডট প্রতিস্থাপন এবং বিন্দুগুলির সাথে প্রতিস্থাপনের আগে উপস্থিত পূর্বরূপের অক্ষর (পাশাপাশি এটি যখন একটি "দৃশ্যমান পাসওয়ার্ড" ক্ষেত্র হয়) উভয়ই পাসওয়ার্ড ক্ষেত্রে প্রয়োগ হয়।

এটি ঠিক করার জন্য এবং এটিকে 1 করার জন্য) ডিফল্ট textPasswordইনপুট টাইপের মতো দেখতে এবং ঠিক একইভাবে কাজ করা , তবে 2) ইঙ্গিত পাঠ্যটিকে একটি ডিফল্ট (নন-মোনস্পেস) ফন্টে প্রদর্শিত হওয়ার অনুমতি দেয়, আপনার TextWatcherক্ষেত্রে ক্ষেত্রটি থাকা উচিত যা টগল করতে পারে হরফ ফাঁকা কিনা তা Typeface.DEFAULTএবং এর Typeface.MONOSPACEভিত্তিতে ফন্টফেস সঠিকভাবে পিছনে পিছনে forth আমি একটি সহায়ক শ্রেণি তৈরি করেছি যা এটি সম্পাদন করতে ব্যবহার করা যেতে পারে:

import android.graphics.Typeface;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

/**
 * This class watches the text input in a password field in order to toggle the field's font so that the hint text
 * appears in a normal font and the password appears as monospace.
 *
 * <p />
 * Works around an issue with the Hint typeface.
 *
 * @author jhansche
 * @see <a
 * href="http://stackoverflow.com/questions/3406534/password-hint-font-in-android">http://stackoverflow.com/questions/3406534/password-hint-font-in-android</a>
 */
public class PasswordFontfaceWatcher implements TextWatcher {
    private static final int TEXT_VARIATION_PASSWORD =
            (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
    private TextView mView;

    /**
     * Register a new watcher for this {@code TextView} to alter the fontface based on the field's contents.
     *
     * <p />
     * This is only necessary for a textPassword field that has a non-empty hint text. A view not meeting these
     * conditions will incur no side effects.
     *
     * @param view
     */
    public static void register(TextView view) {
        final CharSequence hint = view.getHint();
        final int inputType = view.getInputType();
        final boolean isPassword = ((inputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION))
                == TEXT_VARIATION_PASSWORD);

        if (isPassword && hint != null && !"".equals(hint)) {
            PasswordFontfaceWatcher obj = new PasswordFontfaceWatcher(view);
            view.addTextChangedListener(obj);

            if (view.length() > 0) {
                obj.setMonospaceFont();
            } else {
                obj.setDefaultFont();
            }
        }
    }

    public PasswordFontfaceWatcher(TextView view) {
        mView = view;
    }

    public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
        // Not needed
    }

    public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
        if (s.length() == 0 && after > 0) {
            // Input field went from empty to non-empty
            setMonospaceFont();
        }
    }

    public void afterTextChanged(final Editable s) {
        if (s.length() == 0) {
            // Input field went from non-empty to empty
            setDefaultFont();
        }
    }

    public void setDefaultFont() {
        mView.setTypeface(Typeface.DEFAULT);
    }

    public void setMonospaceFont() {
        mView.setTypeface(Typeface.MONOSPACE);
    }
}

তারপরে এটি ব্যবহার করতে, আপনাকে কেবল register(View)স্ট্যাটিক পদ্ধতিতে কল করতে হবে । অন্য সব কিছুই স্বয়ংক্রিয় (ভিউয়ার প্রয়োজন না হলে workaround এড়ানো সহ!):

    final EditText txtPassword = (EditText) view.findViewById(R.id.txt_password);
    PasswordFontfaceWatcher.register(txtPassword);

1
চমৎকার কাজ. একটি ছোট পরিবর্তন: আপনি যদি কোনও হরফ সেট করেন EditText(উদাহরণস্বরূপ ইঙ্গিত পাঠ্য রোবোটো হালকা করা), তবে Typeface.DEFAULTপরে সেটিংস এটিকে ওভাররাইড করে। আমি field.getTypeface()সামনে কল করেছি এবং যখনই পরে আমাকে "ডিফল্ট" ফন্টে পুনরায় সেট করতে হবে তখনই টাইপফেসটি ব্যবহার করি।
ক্রিস্টোফার অর

ঠিক আছে, কল field.getTypeface()করা 100% নির্ভরযোগ্য বলে মনে হচ্ছে না (প্রায়শই আপনি কেবল মনোস্পেস ফন্টটি ফিরে পাবেন), তবে একটি টাইপফেস তৈরি করে Typeface.create()এবং সেটি ঠিকঠাকভাবে কাজ করে বলে মনে হচ্ছে setting
ক্রিস্টোফার অর

5

এই সমস্যাটি সমাধান করার জন্য অনেকগুলি উপায় রয়েছে তবে প্রতিটি উপায়ে রয়েছে উপকারিতা এবং বিপরীতে। এই আমার পরীক্ষা

আমি কেবলমাত্র কিছু ডিভাইসে এই হরফ সমস্যার মুখোমুখি হয়েছি (আমার উত্তর শেষে তালিকাবদ্ধ) যখন ইনপুট পাসওয়ার্ডটি সক্ষম করে

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

আমি যদি ব্যবহার করি তবে android:inputType="textPassword"এই সমস্যাটি ঘটে না

আমি চেষ্টা করেছি কিছু

1) setTransformationMethodপরিবর্তে ব্যবহার করুনinputType

edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
  • হরফ ভাল কাজ করবে
  • কীবোর্ড প্রদর্শনটি খুব ভাল নয় (এটি কেবল পাঠ্য প্রদর্শন করে, পাঠ্যের শীর্ষে নম্বর প্রদর্শন করবেন না)

2) ব্যবহার করুন Typeface.DEFAULT

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);
  • কীবোর্ড প্রদর্শন ,
  • হরফ ভাল কাজ করতে পারে না । উদাহরণটি আমার অ্যাপ্লিকেশন => এর পরে sans-serif-lightসবার জন্য একটি ডিফল্ট ফন্ট , এর পরেও কোনও ডিভাইসে ফন্টটি অন্যরকম দেখাচ্ছেViewsetTypeface(Typeface.DEFAULT)EditText

3) ব্যবহার করুন android:fontFamily="sans-serif"

আমার সমাধান

টাইপফেসের আগে ক্যাশে করুন setInputTypeএরপরে এটি পুনরায় ব্যবহার করুন

Typeface cache = edtPassword.getTypeface();
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTypeface(cache);

পরীক্ষা করা
কিছু ডিভাইস মুখ ফন্ট সমস্যা

  • শাওমি এ 2 (8.0.1)
  • পিক্সেল এক্সএল (8.1.0)
  • সনি এক্স্পেরিয়া জেড 5 অ (এসওভি 32) (6.0)
  • তীর এনএক্স (এফ -04 জি) (6.0.1)
  • কিয়োসেরা (এস 2) (7.0)

কিছু ডিভাইস হরফ সমস্যার সম্মুখীন হয় না

  • স্যামসাং এস 4 (এসসি -04 ই) (5.0.1)
  • স্যামসাং গ্যালাক্সি নোড 5 (5.1.1)
  • স্যামসুং এস 7 এজ (এসএম-জি 935 এফ) (7.0)

ডিভাইসটি কী (নাম এবং ওএস)?
শীতলমাইন্ড

1
@ কুলমাইন্ড আপনার পরামর্শের জন্য আপনাকে ধন্যবাদ, আমার কাছে আপডেট ডিভাইস ফেস ফন্ট সমস্যা এবং ডিভাইসটি আমার বর্তমান ডিভাইসে ফন্টের সমস্যার মুখোমুখি নয়
ফান ভ্যান লিনহ

একটি বড় পরীক্ষার জন্য আপনাকে ধন্যবাদ! আমি তাকে স্ট্যাকওভারফ্লো . com/a/52178340/2914140 থেকে এসেছি । স্যামসুং এস 4 এ আমি setTransformationMethodপদ্ধতিটি ব্যবহার করেছি (যেখানে কোনও সমস্যার মুখোমুখি হয়নি)।
কুলমাইন্ড

আমি আমার উত্তরে যেমন উল্লেখ করেছি, setTransformationMethodকাজ করবে তবে কীবোর্ডটি ভাল প্রদর্শিত হবে না। যাইহোক, যদি আপনি এটি দিয়ে ওকে হন তবে এটি এখনও ওকে কারণ এটি কেবল একটি ছোট সমস্যা
ফান ভ্যান লিনহ

4

অন্যান্য উত্তরগুলি বেশিরভাগ ক্ষেত্রে সঠিক সমাধান।

তবে, আপনি যদি কাস্টম EditTextসাবক্লাস ব্যবহার করছেন তবে বলুন, ডিফল্টরূপে একটি কাস্টম ফন্ট প্রয়োগ করুন, একটি সূক্ষ্ম সমস্যা আছে। আপনি যদি আপনার সাবক্লাসের কনস্ট্রাক্টারে কাস্টম ফন্ট সেট করেন তবে সেট করে নিলে এটি সিস্টেম দ্বারা ওভাররাইট করা হবে inputType="textPassword"

এক্ষেত্রে onAttachedToWindowআপনার super.onAttachedToWindowকলের পরে আপনার স্টাইলিংটি সরিয়ে দিন ।

বাস্তবায়ন উদাহরণ:

package net.petosky.android.ui;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

/**
 * An EditText that applies a custom font.
 *
 * @author cory@petosky.net
 */
public class EditTextWithCustomFont extends EditText {

    private static Typeface customTypeface;

    public EditTextWithCustomFont(Context context) {
        super(context);
    }

    public EditTextWithCustomFont(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextWithCustomFont(
            Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * Load and store the custom typeface for this app.
     *
     * You should have a font file in: project-root/assets/fonts/
     */
    private static Typeface getTypeface(Context context) {
        if (customTypeface == null) {
            customTypeface = Typeface.createFromAsset(
                    context.getAssets(), "fonts/my_font.ttf");
        }
        return customTypeface;
    }

    /**
     * Set a custom font for our EditText.
     *
     * We do this in onAttachedToWindow instead of the constructor to support
     * password input types. Internally in TextView, setting the password
     * input type overwrites the specified typeface with the system default
     * monospace.
     */
    @Override protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        if (!isInEditMode()) {
            setTypeface(getTypeface(getContext()));
        }
    }
}

3

আমি এই পুরোনো এক হতে পারে জানি কিন্তু আমি এই বিষয় এর সাথে সম্পর্কিত যখন আমি ব্যবহার কিছু মধ্যে কুব্জ আছে InputTypeএবংapp:passwordToggleEnabled="true" একসাথে ।

সুতরাং এটি লিখতে যেমন এটি এখানে কাউকে সহায়তা করতে পারে।

আমি app:passwordToggleEnabledআমার পাসওয়ার্ড ইনপুট ক্ষেত্রে বিকল্পের সাথে পাসওয়ার্ড ক্ষেত্রে একটি কাস্টম ফন্ট ব্যবহার করতে চাই । 27.1.1 সালে (এটি লেখার সময়) সমর্থন লাইব্রেরিটি ক্র্যাশ করে।

কোডটি নীচের মতো ছিল,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye" />

    </android.support.design.widget.TextInputLayout>

উপরের কোডটি inputTypeএক্সএমএলে সংজ্ঞায়িত হয়নি

EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());

এবং জাভাতে, setTransformationMethodআমাকে textPasswordইনপুট প্রকারের বৈশিষ্ট্য অর্জন করতে সহায়তা করবে এবং আমার কাস্টম ফন্ট শৈলীতে আমি খুশি।

তবে নীচে উল্লিখিত ক্র্যাশটি সমস্ত এপিআই স্তরে 27.1.1 সমর্থন লাইব্রেরি সহ ঘটেছিল।

java.lang.NullPointerException: নাল বস্তুর রেফারেন্সে ভার্চুয়াল পদ্ধতি 'শূন্যর android.support.design.widget.CheckableImageButton.setChecked (বুলিয়ান)' আহ্বান করার চেষ্টা

এটি onRestoreInstanceStateঅভ্যন্তর TextInputLayoutশ্রেণীর কারণে ক্র্যাশ হচ্ছিল ।

পদক্ষেপগুলি পুনরুত্পাদন করুন: পাসওয়ার্ডের দৃশ্যমানতা টগল করুন এবং অ্যাপ্লিকেশনটি ছোট করুন এবং সাম্প্রতিক অ্যাপ্লিকেশনগুলি থেকে খুলুন। আহ, হো ক্রাশ!

আমার যা দরকার তা হ'ল ডিফল্ট পাসওয়ার্ড টগল অপশন (সমর্থন লাইব্রেরি ব্যবহার করে) এবং পাসওয়ার্ড ইনপুট ক্ষেত্রে কাস্টম ফন্ট।

কিছুক্ষণ পরে, নীচের মতো করে অঙ্কিত,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye"
            android:inputType="textPassword" />

    </android.support.design.widget.TextInputLayout>

এক্সএমএল-এ যুক্ত হয়েছে android:inputType="textPassword"

TextInputLayout inputPassword = findViewById(R.id.input_password);
EditText password = findViewById(R.id.password);
EditText userName = findViewById(R.id.user_name);
// Get the typeface of user name or other edit text
Typeface typeface = userName.getTypeface();
if (typeface != null)
   inputLayout.setTypeface(typeface); // set to password text input layout

উপরের জাভা কোডে,

আমি ব্যবহারকারীর নাম থেকে কাস্টম টাইপফেসটি অর্জন করেছি EditTextএবং TextInputLayoutএটি পাসওয়ার্ড ক্ষেত্রে প্রয়োগ করেছি । পাসওয়ার্ডে স্পষ্ট করে টাইপফেস সেট করার দরকার নেই EditTextকারণ এটি TextInputLayoutসম্পত্তিটি অর্জন করবে ।

এছাড়াও, আমি সরিয়েছি password.setTransformationMethod(new PasswordTransformationMethod());

এইভাবে করে, passwordToggleEnabledকাজ করা হচ্ছে, কাস্টম ফন্টটি প্রয়োগ করা হয়েছে এবং ক্র্যাশকে বাই-বাইও করা হয়েছে। আশা করি আসন্ন সমর্থন রিলিজগুলিতে এই সমস্যাটি স্থির হয়ে যাবে।


2

আপনি একটি কাস্টম উইজেটও ব্যবহার করতে পারেন। এটি খুব সহজ এবং এটি আপনার ক্রিয়াকলাপ / খণ্ডবিধি কোডকে বিশৃঙ্খল করে না।

কোডটি এখানে:

public class PasswordEditText extends EditText {

  public PasswordEditText(Context context) {
    super(context);
    init();
  }

  public PasswordEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();

  }

  public PasswordEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

  private void init() {
    setTypeface(Typeface.DEFAULT);
  }
}

এবং আপনার এক্সএমএল দেখতে পাবেন:

<com.sample.PasswordEditText
  android:id="@+id/password_edit_field"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:hint="Password"
  android:inputType="textPassword"
  android:password="true" />

আমার অভিজ্ঞতায় এটি কার্যকর হয় না - অভ্যন্তরীণভাবে TextViewকন্সট্রাক্টর কল করার পরে কাস্টম টাইপফেসটি ওভাররাইট করে। অন্য উত্তরে একটি সমাধান দেওয়া হয়েছে।
কোরি পেটোস্কি

2

ক্যালিগ্রাফি লাইব্রেরি ব্যবহার করুন ।

তারপরে এটি সঠিক ফন্টের সাহায্যে পাসওয়ার্ড ক্ষেত্রগুলি আপডেট করবে না। সুতরাং কোডে এটি এক্সএমএল নয়:

Typeface typeface_temp = editText.getTypeface();
editText.setInputType(inputType); /*whatever inputType you want like "TYPE_TEXT_FLAG_NO_SUGGESTIONS"*/
//font is now messed up ..set it back with the below call
editText.setTypeface(typeface_temp); 

0

আমি সম্প্রতি সম্পাদনা পাঠের একটি এক্সটেনশনে বিশেষত পাসওয়ার্ডগুলির জন্য এটি কিছু লোককে সহায়তা করতে পারে টগল মনসপেসটি চালু / বন্ধ করার ক্ষমতা যুক্ত করেছি । এটি ব্যবহার করে না android:fontFamilyএটি উপযুক্ত <16।


0

আপনি এটি ব্যবহার করতে পারেন

<android.support.design.widget.TextInputLayout/>

এক্সাথে

<android.support.v7.widget.AppCompatEditText/>

0

আমি এই সমাধানটি ইঙ্গিতের দৃশ্যমানতার উপর নির্ভর করে টাইপফেস টগল করতে ব্যবহার করি। এটি জোয়ের উত্তরের মতো, তবে পরিবর্তে সম্পাদনা পাঠ্য প্রসারিত:

public class PasswordEditText extends android.support.v7.widget.AppCompatEditText {

    public PasswordEditText(Context context) {
        super(context);
    }

    public PasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        if (text.length() > 0) setTypeface(Typeface.MONOSPACE);
        else setTypeface(Typeface.DEFAULT);
    }

}

0

আপনি যদি টেক্সটইনপুটআলআউট এবং একটি সম্পাদনা পাঠের সংমিশ্রণে ক্যালিগ্রাফি লাইব্রেরি ব্যবহার করছেন তবে নীচের কোডটি ভালভাবে কাজ করে।

    EditText password = (EditText) findViewById(R.id.password);
    TextInputLayout passwordLayout = (TextInputLayout) findViewById(R.id.passwordLayout);

    Typeface typeface_temp = password.getTypeface();
    password.setInputType(InputType.TYPE_CLASS_TEXT |
            InputType.TYPE_TEXT_VARIATION_PASSWORD); 

    password.setTypeface(typeface_temp);
    passwordLayout.setTypeface(typeface_temp);

এটি আমার ইঙ্গিতের টাইপফেসটি পরিবর্তন করতে পারেনি
রাফায়েল রুইজ মুউজ

0

একটি অদ্ভুত ঘটনা সম্ভবত, তবে আমি এটি নিয়ে পরীক্ষা-নিরীক্ষা করেছি এবং এটি খুঁজে পেয়েছি:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setTransformationMethod(new PasswordTransformationMethod());

ফন্টের পরিবর্তে ইঙ্গিতটির ফন্টের আকারটি পরিবর্তিত হয়ে গেল! এটি এখনও একটি অনাকাঙ্ক্ষিত প্রভাব। আশ্চর্যজনকভাবে যথেষ্ট, বিপরীত অপারেশন:

password.setTransformationMethod(new PasswordTransformationMethod());
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

একই ফন্টের আকার রাখে।


0

আমি এই সমস্যার একটি নিশ্চিত সমাধান পেয়েছি

হ্যালো করার সর্বোত্তম উপায়, আমি এই সমস্যার একটি নিশ্চিত সমাধান পেয়েছি

সর্বোত্তম উপায় হ'ল একটি কাস্টম এডিটেক্সট তৈরি করা এবং টাইপফেসের মান একটি অস্থায়ী হিসাবে সংরক্ষণ করা এবং তারপরে পদ্ধতিটি ইনপুট টাইপ পরিবর্তনগুলিতে প্রয়োগ করা, অবশেষে, আমরা সম্পাদনা পাঠের ক্ষেত্রে টেম্প টাইপের মুখের মানটি সেট করেছিলাম। তাই ভালো :

public class AppCompatPasswordEditText extends AppCompatEditText {


    public AppCompatPasswordEditText(Context context) {
        super(context);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        Typeface cache = getTypeface();

        if (!isInEditMode() && cache != null) {
            setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            setTypeface(cache);
        }
    }

}

-1

এটি কীভাবে ইনপুট পাসওয়ার্ড তৈরি করতে পারে যা ইঙ্গিতযুক্ত যা * এবং ডিফল্ট টাইপফেসে রূপান্তরিত হয় না !!

এক্সএমএলে:

android:inputType="textPassword"
android:gravity="center"
android:ellipsize="start"
android:hint="Input Password !."

ক্রিয়াকলাপ:

inputPassword.setTypeface(Typeface.DEFAULT);

ধন্যবাদ: অন্তর্দৃষ্টি জন্য আমের এবং rjrjr: ডি।


-2

উপরের মত তবে ক্ষেত্রগুলির xML তে সাহসী স্টাইল না রয়েছে তা নিশ্চিত করুন যেহেতু উপরের ফিক্সের সাথে তারা কখনও একই দেখায় না!


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