2016-03-07 6 views
7

प्रश्न

कैसे एक Activityso that it looks like a dialog का विषय सेट (AndroidManifext.xml बिना छुए) प्रोग्राम के एक करता है?एक गतिविधि की तरह प्रोग्रामिंग को प्रोग्रामेटिक रूप से थीम कैसे करें?

नोट: AndroidManifext.xml को संशोधित करने के साथ मैं ठीक हूं, जब तक इसे सामान्य गतिविधि या संवाद की तरह बनाने के बीच स्विच करने के लिए संशोधित करने की आवश्यकता नहीं होती है।

public class DialogActivity extends Activity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     setTheme(android.R.style.Theme_DeviceDefault_Dialog); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dialog); 
     Log.d(TAG,"Build.VERSION.SDK_INT: "+Build.VERSION.SDK_INT); // 23 
    } 
} 

लेकिन यह blacking out everything in the background समाप्त होता है:

क्या मैं इतनी कोशिश की है अब तक

मैं प्रति this stackoverflow answer के रूप में निम्नलिखित की कोशिश की।

मैं भी this stackoverflow answer देखा, और करने की कोशिश की:

public class DialogActivity extends Activity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     setTheme(android.R.style.Theme_DeviceDefault_Dialog); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dialog); 
     getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    } 
} 

लेकिन यह everything black बनाने समाप्त होता है।

क्या करें? धन्यवाद।

+0

संभावित रूप से डुप्लिकेट: http://stackoverflow.com/questions/1979369/android-activity-as-a-dialog। हो सकता है कि आप इसमें रुचि भी लें: https://github.com/pingpongboss/StandOut –

+0

@NguyenDoanTung धन्यवाद। मैंने उस पोस्ट को भी देखा, लेकिन उनमें से अधिकतर उत्तरों में 'AndroidManifest.xml' को संशोधित करना शामिल है जो मैं नहीं करना चाहता हूं। मैंने http://stackoverflow.com/a/22216966/2898715 में उल्लिखित पहली विधि की कोशिश की, लेकिन यह मेरे प्रश्न में उल्लिखित संतोषजनक परिणाम नहीं मिला। इसके अलावा, जिथब लिंक के लिए धन्यवाद, मैंने इसे चेक आउट किया, हालांकि मुझे उम्मीद है कि एक आसान समाधान होगा। – Eric

उत्तर

8

पृष्ठभूमि

Activity एक Acivity के पीछे अगर अग्रभूमि गतिविधि के अपने AndroidManifest.xml के अनुसार विषय एक संवाद है तैयार की है, अन्यथा एंड्रॉइड ओएस नहीं इसके पीछे Activity खींचें (शायद स्मृति को सहेजने के बाद से आमतौर पर इसे कभी नहीं देखा जाएगा)।

इस का फायदा उठाने के लिए, हम प्रकट में हमारे Acitvity के लिए एक संवाद के विषय निर्धारित करते हैं, बनाने Android ओएस आकर्षित इसके पीछे Activity, लेकिन बाद में, प्रोग्राम के द्वारा जो कुछ भी करने के लिए हम क्रम में चाहते हमारे Activity के विषय निर्धारित किया है।

ट्यूटोरियल

चरण 1:styles.xml में आपके आवेदन के लिए दो कस्टम विषयों पैदा करते हैं। सामान्य गतिविधियों के लिए, और संवाद गतिविधियों के लिए दूसरा। एक कस्टम विषय से प्राप्त करने के लिए कस्टम संवाद विषय के लिए यह महत्वपूर्ण है जो एक संवाद भी है। मेरे मामले में, मूल विषय Base.Theme.AppCompat.Light.Dialog.FixedSize है)। यहाँ मेरी styles.xml है:

<resources> 

    <!-- custom normal activity theme -->  
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    </style> 

    <!-- custom dialog activity theme --> 
    <style name="AppTheme.Dialog" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize"> 
     <!-- removing the dialog's action bar --> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
    </style> 

</resources> 

चरण 2:AndroidManifest.xml में, किसी भी संवाद विषय के प्रश्न में Activity के विषय निर्धारित किया है। यह एंड्रॉइड ओएस को लगता है कि Activity एक संवाद है, इसलिए यह Activity इसके पीछे खींच जाएगा, और इसे काला नहीं करेगा। मेरे मामले में, मैंने Theme.AppCompat.Dialog का उपयोग किया। नीचे मेरी AndroidManifest.xml है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.eric.questiondialog_artifact"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name"> 
     <activity 
      android:name=".DialogActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.AppCompat.Dialog"> <-- IMPORTANT!!! --> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

चरण 3: वास्तविक गतिविधि में, या तो सामान्य गतिविधियों के लिए विषय, या संवाद के लिए विषय के लिए प्रोग्राम के विषय निर्धारित किया है।मेरे DialogActivity.java नीचे है:

package com.example.eric.questiondialog_artifact; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

public class DialogActivity extends AppCompatActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     setTheme(R.style.AppTheme_Dialog); // can either use R.style.AppTheme_Dialog or R.style.AppTheme as deined in styles.xml 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dialog); 
    } 
} 
+1

awsome !!! 'setTheme (R.style.AppTheme_Dialog);' वास्तव में महत्वपूर्ण धन्यवाद है! – Phoenix

1

क्या आप देख रहे हैं आपको गतिविधि के लिए पारदर्शी पृष्ठभूमि के साथ सिर्फ एक विषय है अगर, बस इस का उपयोग करें:

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

अपने AndroidManifest में अपनी गतिविधि को यह शैली लागू फ़ाइल और इस यह

0

से पहले इन कोड का प्रयास करें है dailog.setMessage(...);

Dialog id = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK); 

Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 

//Default theme 

पुराने विषय के लिए यह प्रयास Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_TRADITIONAL);

किटकैट विषय के लिए इन का प्रयास करें

Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK); //Dark 


Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_HOLO_LIGHT); 

pragmatically

के लिए

Exmaple

इन कोड का प्रयास करें
संबंधित मुद्दे