2016-04-28 12 views
13

मैं एक कस्टम प्रोग्रेसबार का उपयोग कर रहा हूं। अब जब एक कार्य चल रहा है, मैं प्रगति पट्टी दिखा रहा हूं, लेकिन उपयोगकर्ता अभी भी विचारों और नियंत्रणों के साथ बातचीत कर सकता है। जब मैं दृश्यमान होता हूं, तो प्रोग्रेसडिअलॉग की तरह पूरे दृश्य पर उपयोगकर्ता इंटरैक्शन को अक्षम कैसे कर सकता हूं।एंड्रॉइड में प्रोग्रेसबार दिखाई देने पर उपयोगकर्ता इंटरैक्शन को कैसे अक्षम करें?

क्या मुझे मुख्य दृश्य के शीर्ष पर एक पारदर्शी दृश्य का उपयोग करने की आवश्यकता है और उस दृश्य पर प्रगति पट्टी दिखाएं और कार्य पूरा होने के बाद उस दृश्य को छुपाएं।

या बस मेरे माता-पिता की आईडी प्राप्त करें और इसे अक्षम करें? लेकिन फिर मैं पृष्ठभूमि को मंद करने में सक्षम नहीं होगा, जैसा कि दृश्य/गतिविधि/टुकड़े पर एक संवाद दिखाई देने पर क्या होता है। सही?

मैं बस प्रगति पट्टी दिखाई देने पर किसी भी बातचीत से उपयोगकर्ता को अस्वीकार करने का तरीका जानना चाहता हूं।

धन्यवाद

+0

संभावित डुप्लिकेट (http: // stackoverflow। कॉम/प्रश्न/2819778/कस्टम-ड्रायबल-फॉर प्रोग्रेसबार-प्रोग्रेसडियलॉग) –

+2

@txteclipse मैं प्रगति पट्टी को कस्टमाइज़ नहीं करना चाहता, मैंने पहले ही ऐसा किया है। तो, मेरा प्रश्न डुप्लिकेट नहीं है। प्रगति बार दिखाई देने पर मैं बस उपयोगकर्ता इंटरैक्शन को अक्षम करना चाहता हूं, वैसे ही जब प्रोग्रेसडिअलॉग दृश्यमान होता है तो उपयोगकर्ता प्रगति संवाद को खारिज किए बिना अन्य यूआई नियंत्रणों पर बातचीत नहीं कर सकता है। अब मेरा प्रश्न उस प्रश्न का डुप्लिकेट कैसे है। मेरा सवाल अनुकूलन से दूरस्थ रूप से भी संबंधित नहीं है। –

+0

यदि आप किसी संवाद की सभी कार्यक्षमता चाहते हैं, तो आपको एक संवाद का उपयोग करना चाहिए। मॉडेलिटी लागू करने के लिए गैर-तुच्छ है: स्वीकार्य उत्तर उदाहरण के लिए कीबोर्ड इंटरैक्शन को अवरुद्ध नहीं करता है। जुड़े प्रश्न में दूसरा जवाब दर्शाता है कि प्रोग्रेसडिअलॉग के साथ कस्टम प्रोग्रेसबार संसाधनों का उपयोग कैसे करें। यदि यह आपकी आवश्यकताओं को पूरा नहीं करता है, तो आप अपने प्रोग्रेसबार के साथ एक [कस्टम लेआउट] (http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout) का उपयोग कर सकते हैं। –

उत्तर

38

आपका प्रश्न: कैसे उपयोगकर्ता संपर्क निष्क्रिय करने के लिए, जबकि ProgressBar एंड्रॉयड में दिख रहा है?

उपयोगकर्ता बातचीत तुम सिर्फ निम्न कोड

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 

उपयोगकर्ता बातचीत प्राप्त करने के लिए वापस तुम सिर्फ

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 

यहाँ निम्नलिखित कोड जोड़ने की जरूरत जोड़ने की जरूरत है अक्षम करने के लिए एक उदाहरण है: नोट: मैं आपको सिर्फ एक उदाहरण दे रहा हूं डब्ल्यू कैसे अक्षम या बनाए रखने के लिए उपयोगकर्ता संपर्क

इस

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/progressBar" 
    android:visibility="gone"/> 

की तरह अपने xml.Something में एक प्रगति बार जोड़े MainActivity में जब एक बटन दबाया आप प्रगति दिखाने के लिए और उपयोगकर्ता बातचीत को अक्षम करें।

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mImageView = (ImageView) findViewById(R.id.imageView); 
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
    mImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mProgressBar.setVisibility(View.VISIBLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 
     } 
    }); 
} 

और जब उपयोगकर्ता backPressed आप प्रगति बार फिर से आप को निष्क्रिय की एक विशेषता जोड़ना चाहते हैं और प्रदर्शन धूसर यदि यह

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    mProgressBar.setVisibility(View.GONE); 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 
} 

तरह interaction.Something उपयोगकर्ता को बनाए रखने निकालने के लिए, आप में जोड़ने की जरूरत आपका एक्सएमएल लेआउट फ़ाइल एक रैखिक लेआउट है जो माता-पिता को भरता है। अपनी पृष्ठभूमि को # बी 0000000 पर सेट करें और इसकी दृश्यता पूर्ण हो गई है। व्यावहारिक रूप से दृश्यता के लिए अपनी दृश्यता सेट करने की तुलना में।

इस सहायता की आशा करें!

-1

आप इस तरह एक प्रोग्रेसडिअलॉग का उपयोग कर सकते हैं;

ProgressDialog progressBar = new ProgressDialog(MainActivity.this); 
progressBar.setMessage("YourMessageHere"); 
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressBar.setCancelable(false); 
progressBar.show(); 
+0

कि मुझे पहले से ही पता है। लेकिन मेरा सवाल केवल प्रोग्रेसबार के लिए है। मैं प्रोग्रेसडिअलॉग का उपयोग नहीं करना चाहता हूं। मैं अपनी खुद की एनीमेशन के साथ कस्टम प्रोग्रेसबार का उपयोग कर रहा हूं। –

+2

प्रोग्रेसडियलॉग इसे – Raskayu

+0

@ रस्कयू को हटा दिया गया है, ऐसा इसलिए है क्योंकि मैंने इसे 28 अप्रैल 2016 को पोस्ट किया था, मुझे विश्वास नहीं है कि इसे –

0

उपयोग दस्तावेज़ डिफ़ॉल्ट विधि progressbar.setCancelable (गलत)

+0

पर हटा दिया गया था लेकिन उपयोगकर्ता इंटरैक्शन पर इसका क्या असर होगा? प्रोग्रेसबार दिखाई देने पर मैं अभी भी संपादन टेक्स्ट में स्पर्श या टाइप कर सकता हूं और रद्द करने योग्य को गलत पर सेट किया जा सकता है। –

+0

और जब से एक प्रगति पट्टी सेट करने के लिए रद्द कर दिया गया है (झूठी) संपत्ति? –

+0

यू के पास विकल्प है जब आपका कार्य आपके पैरेंट व्यू के रूप में गलत सेट हो रहा है और कार्य पूर्ण सेट के रूप में सेट किया गया है – R2R

0

सिर्फ सेट:

अपने xml में
android:clickable="true" 

<ProgressBar... 

केवल इस जादू बनाता है!

1

मैंने ProgressBar पर रूट लेआउट जोड़कर इस समस्या को ठीक किया है। मेरा मुख्य ध्यान में रखते हुए मैं रूट के रूप में RelativeLayout था और अंतिम स्थान पर जड़ लेआउट के अंदर उपर्युक्त कोड जोड़ लिया है (पिछले:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:clickable="true" 
    android:gravity="center" 
    android:visibility="gone" 
    android:id="@+id/progress"> 
    <ProgressBar 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:indeterminate="true" 
     android:indeterminateTintMode="src_atop" 
     android:indeterminateTint="@color/primary"/> 
</LinearLayout> 

जड़ लेआउट क्लिक करने योग्य

android:clickable="true" 

नोट बनाया बच्चे)।

उम्मीद है कि इससे मदद मिलती है !!

0

पारदर्शी पृष्ठभूमि के साथ एक संवाद करें। getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); के साथ समस्या यह है कि जब ऐप पृष्ठभूमि में जाएगा और वापस आ जाएगा उपयोगकर्ता यूआई घटकों के साथ बातचीत करने में सक्षम होगा, बहुत अधिक हैंडलिंग। तो यूआई को अवरुद्ध करने के लिए एक पारदर्शी संवाद करें और यदि आप छुपा/शो के लिए समय निर्धारित करना चाहते हैं। यह एक चलने योग्य धागे में करो। तो समाधान हो जाएगा

public class TransparentDialogHelper { 

    private Dialog overlayDialog; 

    @Inject 
    public TransparentDialogHelper() { 

    } 

    public void showDialog(Context context) { 
     if (AcmaUtility.isContextFinishing(context)) { 
      return; 
     } 
     if (overlayDialog == null) { 
      overlayDialog = new Dialog(context, android.R.style.Theme_Panel); 
      overlayDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED); 
     } 
     overlayDialog.show(); 
    } 

    public void hideDialog() { 
     if (overlayDialog == null || AcmaUtility.isContextFinishing(overlayDialog.getContext())) { 
      return; 
     } 
     overlayDialog.cancel(); 
    } 
} 

-------- Timer 

Handler handler = new Handler(); 
handler.postDelayed(() -> { 
    view.hideProgress(); 
}, 2000); 
0

सापेक्ष लेआउट & के रूप में अपने माता पिता के लेआउट इस जोड़े हैं:

<RelativeLayout ... > 

    <other layout elements over which prog bar will appear> 

<RelativeLayout android:id="@+id/rl_progress_bar" 
       android:layout_width="match_parent" android:clickable="true" 
       android:layout_height="match_parent" > 
<ProgressBar android:id="@+id/pb" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:indeterminateOnly="true" 
      style="@android:style/Widget.DeviceDefault.ProgressBar" 
      android:theme="@style/AppTheme.MyProgressBar" 
    /> 
</RelativeLayout> 

आप अपने यूआई में बटन चल चुके हैं, तो वे अभी भी हड़पने सभी फोकस & क्लिक करने योग्य जब रहने के प्रगति पट्टी दिखाई दे रही है। इस प्रयोग के लिए: (जब आपके prog बार दिखाई दे रहा है & उन्हें जब आप अपने prog बार अदृश्य/चला कर पुन: सक्षम) [ProgressBar/ProgressDialog के लिए कस्टम Drawable] की

fb.setEnabled(false); 
संबंधित मुद्दे